問題
[プログラム]
○整数型: sigma(整数型: max)
整数型: calcX ← 0
整数型: n
for(nを1からmaxまで1ずつ増やす)
( a )
endfor
return calcX
アルゴリズムの問題です。具体例で考えてみましょう。
仮にmaxが5としてみます。
とすると、aには1 + 2 + 3 + 4 + 5 = 15となるようにしたいです。
順番に考えていくと
①n = 1のとき、1
②n = 2のとき、① + 2 = 3
③n = 3のとき、② + 3 = 6
④n = 4のとき、③ + 4 = 10
⑤n = 5のとき、④ + 5 = 15
となっています。
aにcalcX ← calcX + nを入れると
初めはcalcX = 0なので
①n = 1のとき、calcX + n = 1
②以降は、calcXの値はひとつ前のcalcX + nの値なので
②n = 2のとき、calcX + n = 3
③n = 3のとき、calcX + n = 6
④n = 4のとき、calcX + n = 10
⑤n = 5のとき、calcX + n = 15
となります。
よって、calcX ← calcX + nが正しいです。
calcX ← calcX + nが正しいです。
よって本選択肢の内容は正しいです。
アルゴリズムの問題は、簡単な具体例を考えてから解くと分かりやすいでしょう。
関数sigmaは、正の整数を引数maxで受け取り、1からmaxまでの整数の総和を戻り値とする、とありますので、例えばmaxが4の場合の値は以下となります。
1+2+3+4=10
これを踏まえ、選択肢にあるプログラムを当てはめた場合、どのような挙動になるかを確認するようにしましょう
calcX ← 0とあります
0に何を掛けても0となり、戻り値と一致しないため不正解です
n=1
calcX+1=0+1=1
n=2
calcX+1=1+1=2
n=3
calcX+1=2+1=3
n=4
calcX+1=3+1=4
戻り値と一致しないため不正解です
n=1
calcX+n=0+1=1
n=2
calcX+n=1+2=3
n=3
calcX+n=3+3=6
n=4
calcX+n=6+4=10
戻り値と一致するため、正解です
n=1
calcX=1
n=2
calcX=2
n=3
calcX=3
n=4
calcX=4
戻り値と一致しないため不正解です