Bonjour, j’ai un problème AGC et quelque chose ne va pas dans mon code car certaines entrées sont traitées et d’autres non.

la programmation


Énoncé du problème

Snuke has a calculator. It has a display and two buttons.

Initially, the display shows an integer 
x
. Snuke wants to change this value into another integer 
y
, by pressing the following two buttons some number of times in arbitrary order:

Button A: When pressed, the value on the display is incremented by 
1
.
Button B: When pressed, the sign of the value on the display is reversed.
Find the minimum number of times Snuke needs to press the buttons to achieve his objective. It can be shown that the objective is always achievable regardless of the values of the integers 
x
 and 
y
x and y are integers and  different
|x|,|y|≤10^9
.

En fait, toutes les entrées fonctionnent mais seulement deux ne fonctionnent pas, ne fonctionnent pas dans le sens où elles ne donnent pas le résultat souhaité (selon la question) et BTW, je ne connais pas non plus les entrées

Ce que j’ai essayé :

#include<bits/stdc++.h>
using namespace std;
int main(){
    int x,y,steps;
    cin>>x>>y;
    if(x>=0&&y>=0){                                                    
        if(x<y)steps=y-x;                                            
        if(x>y&&y!=0)steps=x-y+2;
        if(x>y&&y==0) steps= x-y+1;                                                            
    }                                                               
    else if(x<=0&&y<=0){                                                                     
        if(x<y)steps=y-x;                                          
        if(x>y&&x!=0) steps=x-y+2;  
       if(x>y&&x==0) steps= x-y+1;                                                          
    }
    else steps=-1*(x+y)+1;
    cout<<steps;
}

Solution 2

Votre calcul pour x < 0 et y < 0 c’est la même chose que quand x > 0 et y > 0. Est-ce exact, ou avez-vous copié-collé le code et oublié de le modifier ?

Vous devrez peut-être également considérer les cas x == y, x == 0et y == 0.

Je suppose que “Certaines entrées sont traitées et d’autres non” signifie que certaines entrées entraînent l’affichage d’un nombre incorrect d’étapes, et non que les entrées elles-mêmes ne sont pas lues par cin. Lorsque vous décrivez un problème, il est important d’être clair.

Solution 1

Compiler ne signifie pas que votre code est correct ! :rire:
Considérez le processus de développement comme la rédaction d’un e-mail : une compilation réussie signifie que vous avez écrit l’e-mail dans la bonne langue – l’anglais plutôt que l’allemand par exemple – et non que l’e-mail contenait le message que vous vouliez envoyer.

Vous entrez maintenant dans la deuxième étape du développement (en réalité, c’est la quatrième ou la cinquième, mais vous reviendrez aux étapes précédentes plus tard) : les tests et le débogage.

Commencez par regarder ce qu’il fait et en quoi cela diffère de ce que vous vouliez. Ceci est important, car cela vous donne des informations sur la raison pour laquelle il le fait. Par exemple, si un programme est destiné à permettre à l’utilisateur de saisir un nombre et qu’il le double et imprime la réponse, alors si l’entrée/sortie était comme ceci :

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16

Ensuite, il est assez évident que le problème vient du bit qui le double – il ne s’ajoute pas à lui-même, ni ne le multiplie par 2, il le multiplie par lui-même et renvoie le carré de l’entrée.
Donc avec ça, vous pouvez regarder le code et il est évident qu’il se trouve quelque part ici :

C#
private int Double(int value)
   {
   return value * value;
   }

Une fois que vous avez une idée de ce qui pourrait ne pas fonctionner, commencez à utiliser le débogueur pour découvrir pourquoi. Placez un point d’arrêt sur la première ligne de la méthode et exécutez votre application. Lorsqu’il atteint le point d’arrêt, le débogueur s’arrêtera et vous confiera le contrôle. Vous pouvez maintenant exécuter votre code ligne par ligne (appelé “single stepping”) et consulter (ou même modifier) ​​le contenu des variables si nécessaire (bon sang, vous pouvez même modifier le code et réessayer si vous en avez besoin).
Pensez à ce que chaque ligne du code doit faire avant de l’exécuter et comparez cela à ce qu’elle a réellement fait lorsque vous utilisez le bouton « Passer par-dessus » pour exécuter chaque ligne tour à tour. Est-ce que ça a fait ce que vous attendiez ? Si c’est le cas, passez à la ligne suivante.
Si non, pourquoi pas ? En quoi est-ce différent ?
Espérons que cela devrait vous aider à localiser quelle partie de ce code présente un problème et quel est le problème.
C’est une compétence qui mérite d’être développée car elle vous aide dans le monde réel ainsi que dans le développement. Et comme toutes les compétences, elle ne s’améliore qu’à l’usage !

Et comme nous n’avons aucune idée des entrées que vous lui donnez, ni même de ce que ce code est censé faire, nous ne pouvons rien faire pour vous !

コメント

タイトルとURLをコピーしました