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; }
generateRandomNumber
génère un nombre aléatoire de quatre chiffres avec au moins deux chiffres distincts.hasTwoDistinctDigits
vérifie si un nombre a au moins deux chiffres distincts.sortAscending
et sortDescending
trient les chiffres d'un nombre par ordre croissant et décroissant respectivement.nextTerm
calcule le terme suivant de la suite en utilisant les règles données.Ce programme affiche chaque terme de la suite jusqu'à ce qu'elle converge.
Oui, on peut être sûr que la suite va converger. Voici pourquoi :
Monotonie : La suite est monotone décroissante. En effet, chaque nouveau terme est obtenu en soustrayant deux nombres (le nombre formé par les chiffres triés par ordre croissant et le nombre formé par les chiffres triés par ordre décroissant). Cette différence est toujours inférieure ou égale au terme précédent.
Bornes inférieures : Les termes de la suite sont des entiers positifs. La suite ne peut donc pas descendre indéfiniment, car elle est bornée inférieurement par zéro.
Convergence vers un palindrome : Lorsque la suite atteint un palindrome (un nombre qui se lit de la même manière dans les deux sens, comme 6174, 1089, etc.), le terme suivant sera le même que le terme actuel, car les chiffres triés par ordre croissant et décroissant seront identiques. Par exemple, pour le nombre 6174, les chiffres triés par ordre croissant donnent 1467 et par ordre décroissant donnent 7641, et la différence 7641 - 1467 = 6174.
Propriété de Kaprekar : La suite de Kaprekar pour les nombres à quatre chiffres converge toujours vers 6174, sauf pour les nombres comme 1111, 2222, etc., qui sont des palindromes dès le départ. Dans le cas de notre programme, nous avons garanti que le premier terme a au moins deux chiffres distincts, ce qui exclut ces cas particuliers.
En résumé, la suite est monotone décroissante, bornée inférieurement par zéro, et converge vers un palindrome (le plus souvent 6174 pour les nombres à quatre chiffres). Par conséquent, la suite va nécessairement converger.
This Chat is read-only. Login to resume chatting.