1

ユーザーは 0 または 1 を入力でき、開始番号 0 に追加されます。

ユーザーが数字を追加するたびに、プログラムは整数が 5 で割り切れるかどうかを判断する必要があります。

例:

  1. 最初の数字は 0 です。
  2. ユーザーが '1' を入力します - 完全な数は '1' です - 答えはノーです。
  3. ユーザーは「0」を入力します - 完全な数は「10」です - 答えはノーです。
  4. ユーザーは「1」を入力します - 完全な数は「101」です - 答えは「はい」です。

答えが最後の剰余と最後の剰余の保持に関係していることは知っていますが、それを行うための正確な計算、論理、または数学が見つかりません。

4

3 に答える 3

5

擬似コード:

remainder=0
while true {
    remainder = remainder % 5
    if remainder = 0
        print "divisbile"
    else
        print "nondivisible"

    remainder = (remainder<<1) + inputBit
}

説明: ある数が 5 で割り切れる場合、その数の倍数も 5 で割り切れるので、その部分は重要ではありません。展開は 2 の乗算と加算としてモデル化できるため、これを問題に適用できます。あとは、剰余を掛けて入力を足し、割り切れるかどうかをチェックするだけです。

于 2013-04-17T11:01:02.370 に答える
0

秘訣は、数値が 5 で割り切れる場合、その数値の最後の 10 進数を知るだけでよいということです。5 または 0 で終わる場合は、5 で割り切れます。5 または 0 で終わらない場合は、追加の金額が必要です。これを剰余と呼んでそこに到達します。残りがあれば、数字の最後の桁をリバース エンジニアリングできます。次に、最後の桁を 2シフトし、ユーザーが入力した新しい数値を追加します ( d )。dに応じて、数値の新しい最後の桁を取得します。これにより、次の 5 の倍数を得るために追加しなければならない新しい剰余を再度確認できます。

ここに画像の説明を入力

int newRemainder[2][5] = {{0,2,4,1,3},{4,1,3,0,2}};
int remainder = 0;
int d;

while(1){
   scanf("%d", &d);
   remainder = newRemainder[d][remainder];
   if (remainder ==0) printf("multiple");
}
于 2013-04-17T12:21:16.707 に答える