数日前に試験を受けましたが、今日、インストラクターが試験の重要な答えを教えてくれました。
質問の1つは
for ( j = 9; j >= 1; j-- )
操作回数をカウントする
結果は20でした。
彼がそれから 20 の操作を取得する方法を説明できる人はいますか?
20 操作:
set j = 9
check if j(9) >= 1
set j to 8
check if j(8) >= 1
set j to 7
check if j(7) >= 1
set j to 6
check if j(6) >= 1
set j to 5
check if j(5) >= 1
set j to 4
check if j(4) >= 1
set j to 3
check if j(3) >= 1
set j to 2
check if j(2) >= 1
set j to 1
check if j(1)>=1
set j to 0
check if j(0)>=1
for( j=n ; j>=0 ; j-- )
では、次の 2 つの操作から始めます。
すべての n<0 の場合、そこで停止します。
n=0 の場合、次のようになります。
n=1 の場合、それらの別のセットを取得します。
したがって、操作の数は、n<0 の場合は 2 回、n>=0 の場合は 2n+4 回です。
これらのことはそれほど難しいことではありません。コンピューターのように考えて、状態 (変数のセット) の変化を注意深く記録する必要があります。
最初の反復でj
は、 が に設定され9
ます。その後、各反復は基本的に同じ 2 つの命令を実行します。
j >= 1
し、j
( j--
) します。これは 9 回行われます (9
包括的から0
包括的まで)。最後の繰り返しで、これが false かどうかを再度テストしj >= 1
、これが false であるため、ループを終了します。したがって、1 + 9 * 2 + 1 = 20 回の反復が得られます。
どのような値を書き留めましたか? ちょっと興味があるんだけど。
一緒に数えましょう、マヤ:
for (j = 9; j >= 1; j--)
1 つは j = 1 に 9 を割り当てます。ループの反復ごとに j の現在の値を 1 と 1 回比較 = 10。最後のループを除くループの反復ごとに j を 1 減らす = 9;
私の本では 1 + 10 + 9 = 20 です。
課題が 1 件あります (j=9)。「j--」操作は 9 回実行されます。条件チェック "j>=1" は 10 回実行され ("is j>=1" という質問をするたびに)、最後のチェックは失敗します。つまり、1 + 9 + 10 = 20 です。
あなたのインストラクターが助けを提供しないほど意地悪である場合、あなたのインストラクターは非常に悪いです. これは、受けるか受けないかの質問の 1 つです。インストラクターが助けるべきです。:)