42 revisité

Bonjour,
"I need somebody help..." ;D
Je ne trouve pas l'erreur j'ai beau regarder quand j'entre 42424242 il me répond 12 >.à n'y rien comprendre ;D

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#include

int nbr_quarante_deux(int x) {

int i, j, nbrotations, temp;    i = 0; j = 0; int tab[100][2] = {0}; nbrotations = 0;   while(x > 10)   {      temp = x % 10; // on recupère le chiffre de droite     if(temp == 2)      {          tab[0][i] = nbrotations;           i++;       }          else if(temp == 4)     {          tab[1][j] = nbrotations;           j++;       }      x = x / 10; // on enlève le dernier chiffre        nbrotations++; }  if(x == 2) {      tab[0][i] = nbrotations;       i++;   }      else if(x == 4)    {      tab[1][j] = nbrotations;       j++;   }

int i2, j2; i2 = 0;    j2 = 0;    x = 0; while(i2    {      j2 = 0;        while(j2        {          if(tab[0][i2]           {              x++;           }          j2++;      }      i2++;  }  return x;}

int main() {

   int x;  scanf("%d",&x);  printf("%d\n", nbr_quarante_deux(x));

  return 0;}

Edité par O'Xian : meilleur rendu du code

Hum...
Sans décortiquer ton code, j'ai déjà l'impression qu'il est trop long pour un petit problème comme celui-ci. Ne te casse pas la tête.

tu utilises ce que tu veux, mais réfléchis au problème avant de te lancer dan le code car la solution est extrêmement simple.

sur ce coup là je sèche

Place les chiffres du nombre dans un tableau d'au plus 10 chiffres et ensuite tu parcours le tableau avec deux indices pour repérer 4 (avec le premier indice) et 2 (avec le second indice) et incrémente un compteur.

Ton code est verbeux et n'est pas clair (mal indenté, mal découpé, mal commenté). Utilise des fonctions pour découper les taches à effectuer. Dans ton code, tu te galères à chercher les chiffres du nombre mais tu peux le faire sans douleur avec sprintf() ainsi avec ce que je propose ci-dessous.

Je trouve que le code-source C à recopier induit en erreur : on peut très bien capturer l'entrée non pas comme un entier (formateur %d proposé) mais plutôt comme une suite de caractères que sont les chiffres du nombre (formateur %s) avec la difficulté que l'énoncé n'est pas assez précis car il ne dit pas par quoi est suivi le nombre (un caractère nul, un saut de ligne, une fin de fichier ?). En même temps, je veux bien admettre que l'utilisation du formateur %s pourrait troubler ou donner une indication trop forte.

L'indentation n'est pas de sa faute : son code est possiblement très bien indenté, mais le forum (comme beaucoup d'autres) supprime les espaces de début de ligne...

Peut-être qu'avec la balise code on pourrait voir l'indentation.

Liking : je pense que le mieux serait de recommencer du début, en programmant une solution beaucoup plus simple (la mienne tient en 12 lignes, en comptant les accolades, sans le main).

Oui, je n'ai rien dit, ce n'est pas le forum en lui-même mais l'affichage html. Une balise code résoudrait bien ça.

Pour Candide :
oui, il est effectivement plus efficace de récupérer directement la chaîne, mais c'est aussi intéressant de voir si le candidat sait récupérer les chiffres d'un nombre qui lui est donné en tant qu'entier (avec des divisions et des modulos, ce que le code donné ici fait).

J'ai procédé comme candide, ce qui me paraissait être la solution la plus simple.

Tu comptes les 4, et dès que t'arrives à un deux tu augments le nombre de 42 du nombre de 4.

Répondre au sujet

Vous devez vous enregistrer ou vous connecter pour poster des messages.