Partage
  • Partager sur Facebook
  • Partager sur Twitter

Compter le nombre de chiffres

Compter le nombre de chiffres vue de gauche, droite, haut, bas.

Sujet résolu
    15 août 2021 à 14:32:34

    Bonjour, je suis entrain de faire un programme qui résout les gratte-ciel 4x4, et là je suis à la fin mais j'ai un problème en fait avec mes fonctions qui compte combien de chiffres je vois sur la ligne depuis la vue gauche, droite...

    Admettons j'ai:

    2: 1, 4, 3, 2 :3

    Vue de gauche, j'en vois 2 et vue de droite j'en vois 3, tout est ok.

    Mais ma fonction est vraiment casse-gueule je sais pas comment faire, je pensais pas que c'est ça qui allait me bloquer dans ce genre de programme..

    Si vous pouvez m'éclairer un peu svp, merci d'avance !

    int	check_left_range(int tab[4][4], int consign[4][4], int x)
    {
    	int j = 0;
    	int tmp = tab[x][0];
    	int value = consign[LEFT][x];
    	int count = 0;
    	while (j < 4)
    	{
    		if (value > tab[x][j])
    			count++;
    		j++;
    	}
    	printf("\ncount left: %d - value: %d\n", count, value);
    	return (count == value);
    }
    • Partager sur Facebook
    • Partager sur Twitter
      15 août 2021 à 15:07:26

      En quoi ta fonction est-elle casse-gueule? La variable tmp n'est pas utilisée.
      J'aurais mis une boucle for au lieu de while. Que veux-tu retourner?
      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        15 août 2021 à 15:23:35

        Ligne 9, pour savoir si ton immeuble est visible tu dois le comparer aux immeubles précédent pas à la consigne !

        PierrotLeFou a écrit:

        Que veux-tu retourner?

        0 si le nombre d'immeuble visible est égal à la consigne. (l'écart sinon) L'important est de savoir si c'est égal à la consigne.

        -
        Edité par rouIoude 15 août 2021 à 15:55:17

        • Partager sur Facebook
        • Partager sur Twitter
        ...
          15 août 2021 à 16:21:43

          Merci pour vos réponses !

          J'ai bien essayé ce que tu dis @rouloude, mais je sais pas je dois faire quelque chose de mal vu que rien fonctionne..

          J'ai fait un main à part, et pour le coup, vue de gauche il me renvoie 1, et vue de droite il renvoie 2.

          #include <stdio.h>
          
          int	main(void)
          {
          	int tab[4] = {2, 1, 4, 3};
          	int consign = 2;
          
          	int count = 0;
          
          	int i = 1;
          	while (i < 4)
          	{
          		if (tab[i] > tab[i - 1])
          			count++;
          		i++;
          	}
          	printf("count: %d\n", count);
          
          	i = 2;
          	count = 0;
          	while (i >= 0)
          	{
          		if (tab[i] > tab[i + 1])
          			count++;
          		i--;
          	}
          	printf("count: %d\n", count);
          	return (0);
          }

          Je crois, je dois pas comprendre un truc :(

          • Partager sur Facebook
          • Partager sur Twitter
            15 août 2021 à 16:57:10

            Hello,

            Tu ne dois pas comparer la valeur de la case en cours avec la valeur de la case précédente, mais avec la valeur la case la plus élevée rencontrée. Exemple:

            #include <stdio.h>
            
            #define N	4
             
            int main(void) {
            //	int array[N]={2,1,4,3};		// g-à-d:2 (2,4),	d-à-g:2 (3,4)
            //	int array[N]={1,2,4,3};		// g-à-d:3 (1,2,4),	d-à-g:2 (3,4)
            //	int array[N]={4,2,1,3};		// g-à-d:1 (4),		d-à-g:2 (3,4)
            	int array[N]={4,2,3,1};		// g-à-d:1 (4),		d-à-g:3 (1,3,4)
            	int maxh,count;
            	
            	maxh=0;
            	count=0;
            	for(int i=0;i<N;i++)
            		if(array[i]>maxh) {
            			maxh=array[i];
            			count++;
            		}
            	printf("g-a-d: %d\n",count);
            	
            	maxh=0;
            	count=0;
            	for(int i=N-1;i>=0;i--)
            		if(array[i]>maxh) {
            			maxh=array[i];
            			count++;
            		}
            	printf("d-a-g: %d\n",count);
            
            	return (0);
            }

            -
            Edité par edgarjacobs 15 août 2021 à 17:09:32

            • Partager sur Facebook
            • Partager sur Twitter

            On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

              15 août 2021 à 17:06:43

              edgarjacobs a écrit:

              Hello,

              Tu ne dois pas comparer la valeur de la case en cours avec la valeur de la case précédente, mais avec la valeur la case la plus élevée rencontrée. Exemple:

              #include <stdio.h>
              
              #define N	4
               
              int main(void) {
              //	int array[N]={2,1,4,3};		// g-à-d:2 (2,4),	d-à-g:2 (3,4)
              //	int array[N]={1,2,4,3};		// g-à-d:3 (1,2,4),	d-à-g:2 (3,4)
              	int array[N]={4,2,1,3};		// g-à-d:1 (4),	    d-à-g:2 (3,4)
              	int maxh,count;
              	
              	maxh=0;
              	count=0;
              	for(int i=0;i<N;i++)
              		if(array[i]>maxh) {
              			maxh=array[i];
              			count++;
              		}
              	printf("g-a-d: %d\n",count);
              	
              	maxh=0;
              	count=0;
              	for(int i=N-1;i>=0;i--)
              		if(array[i]>maxh) {
              			maxh=array[i];
              			count++;
              		}
              	printf("d-a-g: %d\n",count);
              
              	return (0);
              }

              -
              Edité par edgarjacobs il y a moins de 30s

              Incroyable merci @edgarjacobs !!!

              Le pire, c'est que j'avais essayé cette logique !

              Mais encore une fois, j'ai du faire quelque chose de travers, ca me rassure le fait que j'avais vu juste. Merci à tous!

              • Partager sur Facebook
              • Partager sur Twitter
                15 août 2021 à 17:14:29

                En reprenant ton exemple :

                #include <stdio.h>
                
                int main(void)
                {
                    int tab[4] = {2, 1, 4, 3};
                
                    int consign = 2;
                
                    int count = 1; //Le premier est visible
                
                    int height = tab[0]; // On garde sa hauteur en mémoire.
                
                    int i = 1;
                    while (i < 4)
                    {
                        if (tab[i] > height)
                        {
                            count++;
                            height = tab[i]; // On garde sa hauteur en mémoire.
                        }
                        i++;
                    }
                
                    printf("%d\n", count);
                
                    // tu peux comparer à ta consigne.
                    if(count==consign) puts("C'est Ok !");
                
                    return 0;
                }



                • Partager sur Facebook
                • Partager sur Twitter
                ...

                Compter le nombre de chiffres

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown