SCHIRRA Rémi Prep ISIMA 1 - 2023-2024
Le problème propose The River II consiste en determiner si une
position dans une rivière digitale peut être un point d’intersection de
deux rivières.
Une rivière digitale est définie en fonction d’un chiffire k, pour
laquelle le chiffre suivant est la valueur de k à laquelle on ajoute la
somme des chiffres composant k.
A partir d’une position donnée, il suffit d’essayer des nombres plus petit que la position et regarder si son terme suivant est égal à la position donnée. Si on en trouve un, la position donnée est un point d’intersection sinon, non.
river : position entrée par l’utilisateur
Fonction solution :
Boucle de 1 jusqu’à river :
Renvoyer faux (0)
#include <stdio.h>
// fonction calculant la somme des chiffres d'un nombre
int sum(int num) {
int sum = 0;
while (num != 0) {
+= num % 10;
sum /= 10;
num }
return sum;
}
int solution(river) {
for (int i=1; i<river; i++) {
// Boucle sur tout les nombres plus petit que river
if (i + sum(i) == river) return 1;
}
return 0;
}
int main()
{
int r_1;
("%d", &r_1);
scanf
(solution(r_1) ? "YES" : "NO");
printf
return 0;
}
A partir de cette solution externe :
#include <stdio.h>
int main()
{
int r_1, i, j, s, test = 0;
("%d", &r_1);
scanffor(i = r_1 -1 ; i > 0 && !test ; i--){
= 0, j = i;
s while(j) s += j%10, j /= 10;
if(i+s == r_1){
= 1;
test }
}
(test ? "YES" : "NO");
printf
return 0;
}
Cette solution a la même logique que la mienne, sauf que les nombres sont vérifié dans l’ordre inverse. J’ai aimé dans cette solution la manière compacte de calculer la somme des chiffres d’un nombre.
Après avoir analyser le problème, je l’ai trouvé plutôt simple à résoudre et je n’ai pas rencontré de difficultés.