SCHIRRA Rémi Prep ISIMA 1 - 2023-2024
Le problème propose The River I consiste en trouver l’intersection de
deux suites, quand est-ce que leur valeur sont égales.
Une rivière digitale est définie en fonction d’un chiffire k, pour
laquelle le chiffre suivant est la valeur de k à laquelle on ajoute la
somme des chiffres composant k.
Les deux rivières sont représentées par des suites, on sait que les
suites sont strictement croissante (on admet k > 0).
Les suites étant croissante, pour chercher l’intersection, on avance sur
la rivière possédant la plus petite valeur, espérant que le nouveau
terme soit égal à la valeur de l’autre rivière.
rivière1 = nombre entré par l’utilisateur
rivière2 = nombre entré par l’utilisateur
Tant que rivière1 \(\neq\) rivière2
:
Fin boucle
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdbool.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 main()
{
long long r_1;
("%lld", &r_1);
scanflong long r_2;
("%lld", &r_2);
scanf
// Conversion en entier
int current_1 = (int) r_1;
int current_2 = (int) r_2;
while (current_1 != current_2) {
// Si la valeur actuelle de river 1 < celle de river 2, on continue de
// parcourir river 1, sinon on parcours river 2
// On continue jusqu'à ce que la valeur actuelle des 2 rivières soient égales
if (current_1 > current_2) {
+= sum(current_2);
current_2 }
else {
+= sum(current_1);
current_1 }
}
("%d\n", current_1);
printf
return 0;
}
A partir de cette solution externe :
#include <stdio.h>
int main()
{
int r_1, r_2, i, somme;
("%d %d", &r_1, &r_2);
scanfwhile(r_1 != r_2){
if(r_1 > r_2){
+= r_2;
r_1 = r_1 - r_2;
r_2 -= r_2;
r_1 }
= 0;
somme
for(i = 10; i <= r_1*10 ; i=i*10)
+= (int)((r_1%i)/(i/10));
somme
+= somme;
r_1 }
("%d", r_1);
printfreturn 0;
}
J’ai aimé cette solution car au lieu d’effectuer des opérations en
fonction de si r_1
> r_2
ou
r_2
< r_1
, les deux valeurs sont échangées
afin de s’assurer que r_1
< r_2
et ensuite
calcule le terme suivant de r_1
.
J’ai aimé le fait que les deux valeurs soient échangées sans utiliser de
variable intermédiaires.
Cette solution propose également un calcul pour la somme des chiffres
similaire mais différent du mien, le mien est moins compacte et utilise
une variable intermédiaire en plus.
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.