【解決方法】こんにちは、AGC の問題があり、一部の入力が処理され、一部が処理されていないため、コードに何か問題があります。


問題文

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
.

実際、これではすべての入力が機能していますが、2つだけが機能していません。(質問によると)必要な出力が得られていないという意味で機能していません。ところで、入力もわかりません

私が試したこと:

#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;
}

解決策 2

あなたの計算は x < 0y < 0 時と同じです x > 0y > 0。 それは正しいですか、それともコードをコピー&ペーストして変更するのを忘れましたか?

ケースも考慮する必要があるかもしれません x == yx == 0、 と y == 0

「一部の入力は処理されており、一部は処理されていない」ということは、入力自体が読み取られていないということではなく、一部の入力によって間違ったステップ数が表示されることを意味すると思います。 cin。 問題を説明するときは、明確にすることが重要です。

解決策 1

コンパイルしたからといって、コードが正しいというわけではありません。 :笑う:
開発プロセスを電子メールを書くことと考えてください。コンパイルが成功したということは、電子メールを適切な言語 (たとえばドイツ語ではなく英語) で書いたことを意味します。電子メールに送信したいメッセージが含まれていたわけではありません。

これで、開発の第 2 段階 (実際には第 4 段階か第 5 段階ですが、後で初期段階に戻ります) に入ります: テストとデバッグ。

まず、それが何をするのか、そしてそれがあなたが望んでいることとどう違うのかを見てみましょう。 これは、なぜそのような動作をしているのかについての情報を提供するため、重要です。 たとえば、プログラムがユーザーに数値を入力させ、その数値を 2 倍にして答えを出力することを目的としている場合、入力/出力が次のようになったとします。

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

次に、問題はそれを 2 倍にするビットにあることは明らかです。ビット自体に加算したり 2 を乗算したりするのではなく、自身を乗算して入力の 2 乗を返します。
それで、コードを見ると、それがここのどこかにあることが明らかです。

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

何が問題なのかがわかったら、デバッガーを使用してその理由を調べてください。 メソッドの最初の行にブレークポイントを配置し、アプリを実行します。 ブレークポイントに到達すると、デバッガーは停止し、制御がユーザーに渡されます。 コードを 1 行ずつ実行し (「シングル ステップ」と呼ばれます)、必要に応じて変数の内容を確認 (または変更) できるようになりました (必要に応じて、コードを変更して再試行することもできます)。
コードを実行する前にコードの各行が何をすべきかを考え、それを「ステップオーバー」ボタンを使用して各行を順番に実行したときの実際の動作と比較してください。 期待通りの結果になりましたか? その場合は、次の行に進みます。
そうでない場合は、なぜそうではないのでしょうか? どう違うのでしょうか?
コードのどの部分に問題があるのか​​、また何が問題なのかを特定するのに役立つことを願っています。
これはスキルであり、開発だけでなく現実世界でも役立つため、伸ばす価値のあるスキルです。 すべてのスキルと同様、それは使用することでのみ向上します。

そして、私たちはあなたがどのような入力を与えたのか、あるいはそのコードが何をするのかさえわからないので、あなたに代わってそれを行うことはできません。

コメント

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