ITパスポート模擬試験~令和4年度【問78】~

関数 checkDigit は, 10 進9桁の整数の各桁の数字が上位の桁から順に格納された整数型の配列 originalDigit を引数として、次の手順で計算したチェックデジットを戻り値とする。プログラム中の a に入れる字句として、適切なものはどれか。ここで、配列の要素番号は1から始まる。

[手順]
(1) 配列 originalDigit の要素番号1~9の要素の値を合計する。
(2) 合計した値が9 より大きい場合は、合計した値を 10 進の整数で表現したときの各桁の数字を合計する。この操作を、合計した値が9 以下になるまで繰り返す。
(3) (2) で得られた値をチェックデジットとする。

【答え】イ

【解説】

問題のポイント整理

処理の概要

  1. originalDigit[1]~originalDigit[9] を合計し、j に格納。
  2. j が9より大きい場合、その各桁の数字を合計し直す。
  3. これを j ≤ 9 になるまで繰り返す。

プログラムの該当部分の動き

while (j が 9 より大きい)
 k ← j ÷ 10 の商
 (a) ← ?
endwhile

このwhileループは「各桁の合計」を繰り返す部分です。
→ j の各桁を足すには、十の位 (k) と一の位 (j – 10 × k) を足せばよい。

例えば、j = 52 のときは

k = 52 ÷ 10 = 5(十の位の数字)
j – 10 × k = 52 – 50 = 2(一の位の数字)
→ 各桁の合計は 5 + 2 = 7

よって、j ← k + (j – 10 × k)

選択肢の確認

j = 52(k = 5)として考えていきます。

ア. j ← j – 10 × k

→ j – 10 × k

→ 52ー10 × 5=2

→一の位だけを取り出していて不十分。

イ. j ← k + (j – 10 × k)

→ k + (j – 10 × k)

→5+(52ー10 × 5)=7

→ ⭕ 各桁の合計となるため、これが正解。

ウ. j ← k + (j – 10) × k

→ k + (j – 10) × k

→5+(52ー10) × 5=215

→処理の意味が不明。

エ. j ← k + j

→ k + j

→ 5 + 52=57

→元の j に十の位を足しているだけ。

以上より、正解はイ.となります。

間違えた人はこちらで復習

アルゴリズムとプログラミング2~擬似言語~

※アルゴリズムが苦手な人は、あまり時間をかけずに他の問題に移りましょう。