0 から 10 までの数字を選択する必要があるとしましょう。
私が選んだ数字は6です。
次に選びたい数字は0です。
ここでのルールは、数値を 1 ずつ増やすか 1 ずつ減らす必要があるということです。数値は最後の数値をラップすることもできます。
ここで最も重要なことは、どの方向に進むのが最も短いかを見つけることです。
そう
6-5-4-3-2-1-0 = 7 moves.
6-7-8-9-10-0 = 6 moves.
したがって、この場合はインクリメントが勝ちます。
さて、私はこのコードを思いつきました(おそらく壊れています)
int movesInc = 1;
int movesDec = 1;
int curNumber = 6;
int nextNumber = 0;
while((curNumber-- % 11) != nextNumber)
movesDec++;
while((curNumber++ % 11) != nextNumber)
movesInc++;
両方向で while ループを使用する代わりに..そしてどちらがより少ない動きをするかを見つける..
whileループなしでこれを行う方法はありますか? たぶん、ある種の数式ですか?