2017-08-06 3 views
-4

J'ai essayé d'écrire un programme qui affiche "OUI" si chaque valeur x ou valeur y est la même. Sinon, il donne la sortie "NON". La logique est la suivante: si toutes les valeurs x de la valeur maximale sont identiques à la valeur minimale de toutes les valeurs de x, cette valeur n'a jamais changé, donc toutes les valeurs de x sont les mêmes. Idem pour les valeurs y. Cependant, la sortie donne parfois le résultat correct, parfois pas (pour la même entrée). De plus, les sorties ne sont pas régulières. (Par exemple, 2 correct, 3 faux, 5 correct, 1 mal etc.)Le même programme donne différentes sorties à chaque fois que j'exécute

Voici mon code:

#include <iostream> 
#include <climits> 
using namespace std; 

int main(){ 
    int n; 
    int minX,minY=INT_MAX; 
    int maxX,maxY=INT_MIN; 
    cin>>n; 
    while(n--){ //for the next n line 
     int x,y; 
     cin>>x>>y; 
     maxX=max(maxX,x); 
     //cout<<maxX<<" "; //comments I write to find out what the heck is happening 

     minX=min(minX,x); // This value changes irregularly, which I suspect is the problem. 
     //cout<<minX<<" "; 

     maxY=max(maxY,y); 
     //cout<<maxY<<" "; 

     minY=min(minY,y); 
     //cout<<minY<<endl; 

    } 
    if(maxX==minX||maxY==minY){ //If the x values or the y values are all the same, true 
     cout<<"YES"; 
    } 
    else{ 
     cout<<"NO"; 
    } 
    return 0; 
} 

Entrée:

5 
0 1 
0 2 
0 3 
0 4 
0 5 

sortie quand il fonctionne (avec Couts je commentais):

0 0 1 1 
0 0 2 1 
0 0 3 1 
0 0 4 1 
0 0 5 1 
YES 

une des sorties quand il ne fonctionne pas (avec les Couts)

mes propres commentaires
0 -1319458864 1 1 // Not all the wrong outputs are the same, each wrong output is different than the other wrong output. 
0 -1319458864 2 1 
0 -1319458864 3 1 
0 -1319458864 4 1 
0 -1319458864 5 1 
NO 
+4

Pourquoi utilisez-vous tellement d'inclusions que vous n'utilisez pas? – Rakete1111

+5

Vous n'initialisez jamais 'minX' et' maxX'. – Cornstalks

+0

^Ce qui signifie que leur lecture laisse votre programme avec un comportement indéfini. – StoryTeller

Répondre

0

Dans ces lignes

int minX,minY=INT_MAX; 
int maxX,maxY=INT_MIN; 
    ^

minX et maxX est jamais initialisé. C'est un UB tel que défini par la norme. Tout ce que vous lisez n'est pas prévisible - c'est généralement ce qui reste sur ce bloc de mémoire par un autre processus.

Notez que la = a une priorité supérieure à la virgule, de sorte que l'expression est évaluée comme

int (minX),(minY=INT_MAX); 

En fait, la virgule a la priorité la plus faible parmi tous les opérateurs en C++. Changez-les à ceux-ci devrait fixer

int minX=INT_MAX,minY=INT_MAX; 
int maxX=INT_MIN,maxY=INT_MIN; 
     ^~~~~~~ 
+0

Le fait de placer une variable (avec initialisation) par ligne résoudra également le problème. –