0

簡単に言えば、オンラインジャッジを通じてプログラミングの練習をしています。これはかなりばかげた問題ですが、本当に簡単です。しかし、裁判官は私の答えが間違っていると言い続けています。ほんの数行のコードと問題へのリンクを貼り付けます。

#include <iostream>
#include <string>

using namespace std;

int main() {

    int cases = 0;
    string solution = "";
    cin >> cases;

    if (cases > 100)
        return(0);

    for (int i = 0; i < cases; i++) {
        int temp = 0;
        cin >> temp;
        if ((temp % 4) == 0)
            solution +="Y";
        else
            solution +="N";
    }

    for (int j = 0; j < cases; j++) {
        if (solution[j] == 'Y')
            cout << "YES";
        else
            cout << "NO";
        cout << endl;
    }
}

問題は、入力された 4 で割り切れる数値ごとに YES または NO を出力することです。4 で割り切れる場合は YES、そうでない場合は NO を出力します。問題とすべての詳細を見つけることができます: http://coj.uci.cu/24h/problem.xhtml?abb=1306

これはかなりばかげていますが、私が何を間違っているのかを理解しようとして、ここでばかげています!

4

6 に答える 6

10

数字の最後の 2 桁が 4 で割り切れる場合、数字は 4 で割り切れます。

終わり。

PSプログラマーとして考えるのをやめて、代数/算術を覚えることが理にかなっている場合があります。

于 2013-08-05T20:55:43.023 に答える
3

コメントで言ったように、問題は 100 桁の数字を直接 int に読み込めないことです。アルゴリズムの解決策を提供したくはありませんが、役立つヒントを提供したいと思います: 数値が 2 で割り切れるか 5 で割り切れるかを知るには何桁必要ですか? どうすればそれを 4 に拡張できますか?

于 2013-08-05T20:25:23.723 に答える
1

数値 X を Y + d として表す場合、d = X%100 および Y = X -d の場合、Y は常に 100 で割り切れることがわかります。たとえば、数値 X = 343535 の場合、Y は 343500 になり、d はY は 100 で割り切れるので、これは 4 で割り切れることを意味します。したがって、X が 4 で割り切れるかどうかを判断できます。d が 4 で割り切れるかどうか、つまり X の下 2 桁を調べます。

正式には次のようになります。

Y = 4*Z

Y = 100*X +d

Y = 4*Z = 4*25*X +d

d = 4*(Z - 25*X)

つまり、Y が 4 の倍数の場合、d は 4 の倍数です。

問題を解決するには、この原則を適用する必要があります。

生の文字列を読み取って、最後の 2 文字で表される数値が 4 で割り切れるかどうかを確認するだけです。

于 2013-08-05T21:00:13.523 に答える
0

魅力的かもしれませんが、BitInteger100 桁の数、100 万桁の数が 4 で割り切れるかどうかを計算する必要はありません。あなたはルールを知りません。

于 2013-08-05T20:34:22.883 に答える
0

私は数字全体を読むことさえしませんでした。EOF char (ファイルの終わり) の前の最後の 2 桁を読み取るだけです。

string inputString;
while(getline(cin,inputString)
{
    //code for finding x %4==0 and output
}

その後、最後の 2 文字を int に変換してから mod 4 コードを実行するだけです。(数値が 10 未満の場合は catch 値が必要ですが、それは難しいことではありません)

于 2013-08-05T21:01:04.843 に答える
0

おそらく問題はこれif (cases > 100)です。このため、-1 が有効なオプションになります。に変更しif (cases > 100 && cases < 1)て修正します

于 2013-08-05T20:40:45.203 に答える