Voici un programme en C qui calcule les termes de la suite décrite jusqu'à ce qu'elle converge. Le programme génère un nombre aléatoire de quatre chiffres avec au moins deux chiffres distincts, puis applique les règles données pour générer les termes suivants jusqu'à ce que la suite converge.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
// Fonction pour vérifier si un nombre a au moins deux chiffres distincts
bool hasTwoDistinctDigits(int number) {
int digits[10] = {0};
while (number > 0) {
digits[number % 10]++;
number /= 10;
}
int distinctCount = 0;
for (int i = 0; i < 10; i++) {
if (digits[i] > 0) {
distinctCount++;
if (distinctCount >= 2) {
return true;
}
}
}
return false;
}
// Fonction pour générer un nombre aléatoire de quatre chiffres avec au moins deux chiffres distincts
int generateRandomNumber() {
int number;
do {
number = 1000 + rand() % 9000; // Génère un nombre entre 1000 et 9999
} while (!hasTwoDistinctDigits(number));
return number;
}
// Fonction pour classer les chiffres d'un nombre par ordre croissant
int sortAscending(int number) {
int digits[4];
for (int i = 0; i < 4; i++) {
digits[i] = number % 10;
number /= 10;
}
for (int i = 0; i < 3; i++) {
for (int j = i + 1; j < 4; j++) {
if (digits[i] > digits[j]) {
int temp = digits[i];
digits[i] = digits[j];
digits[j] = temp;
}
}
}
return digits[0] * 1000 + digits[1] * 100 + digits[2] * 10 + digits[3];
}
// Fonction pour classer les chiffres d'un nombre par ordre décroissant
int sortDescending(int number) {
int digits[4];
for (int i = 0; i < 4; i++) {
digits[i] = number % 10;
number /= 10;
}
for (int i = 0; i < 3; i++) {
for (int j = i + 1; j < 4; j++) {
if (digits[i] < digits[j]) {
int temp = digits[i];
digits[i] = digits[j];
digits[j] = temp;
}
}
}
return digits[0] * 1000 + digits[1] * 100 + digits[2] * 10 + digits[3];
}
// Fonction pour calculer le terme suivant de la suite
int nextTerm(int number) {
int a = sortAscending(number);
int b = sortDescending(number);
return b - a;
}
int main() {
srand(time(NULL)); // Initialise le générateur de nombres aléatoires
int currentTerm = generateRandomNumber();
printf("Premier terme : %d\n", currentTerm);
while (true) {
int next = nextTerm(currentTerm);
printf("Terme suivant : %d\n", next);
if (next == currentTerm) {
break;
}
currentTerm = next;
}
return 0;
}
Explication du programme :
- Génération d'un nombre aléatoire : La fonction
generateRandomNumber génère un nombre aléatoire de quatre chiffres avec au moins deux chiffres distincts.
- Vérification des chiffres distincts : La fonction
hasTwoDistinctDigits vérifie si un nombre a au moins deux chiffres distincts.
- Tri des chiffres : Les fonctions
sortAscending et sortDescending trient les chiffres d'un nombre par ordre croissant et décroissant respectivement.
- Calcul du terme suivant : La fonction
nextTerm calcule le terme suivant de la suite en utilisant les règles données.
- Boucle principale : Le programme génère le premier terme, puis calcule les termes suivants jusqu'à ce que la suite converge (c'est-à-dire que le terme suivant est égal au terme actuel).
Ce programme affiche chaque terme de la suite jusqu'à ce qu'elle converge.