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);
}
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
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
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!
#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;
}
...
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.
Le Tout est souvent plus grand que la somme de ses parties.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent