アルゴリズムとプログラミング
ITパスポート試験「アルゴリズムとプログラミング」の問題
関数 checkDigit は,10進9桁の整数の各桁の数字が上位の桁から順に格納された整数型の配列 originalDigit を引数として,次の手順で計算したチェックデジットを戻り値とする。プログラム中の空欄aに入れる字句として,適切なものはどれか。ここで,配列の要素番号は1から始まる。
〔手順〕
(1) 配列 originalDigit の要素番号1~9の要素の値を合計する。
(2) 合計した値が9より大きい場合は,合計した値を10進の整数で表現したときの各桁の数字を合計する。この操作を,合計した値が9以下になるまで繰り返す。
(3) (2)で得られた値をチェックデジットとする。
〔プログラム〕(擬似コード)
○整数型: checkDigit(整数型の配列: originalDigit)
整数型: i, j, k
j ← 0
for (i を 1 から originalDigitの要素数 まで 1 ずつ増やす)
j ← j + originalDigit[i]
endfor
while (j が 9 より大きい)
k ← j ÷ 10 の商 /* 10進9桁の数の場合,j が2桁を超えることはない */
[ a ]
endwhile
return jアj ← j-10×k
イj ← k+(j-10×k)
ウj ← k+(j-10)×k
エj ← k+j
正解
イ.j ← k+(j-10×k)
while内に入った時点でjは桁の数字の合計値(2桁になりうる)。k ← j÷10の商はjの十の位の数字である。手順(2)はjの各桁の数字を足すことなので、十の位kと一の位を足す必要がある。一の位はj−10×kで求まる。よって新しいjは k+(j−10×k) となり、イが正しい。検算:j=35ならk=3、3+(35−30)=8で正しく桁和が得られる。
?選択肢ごとの解説
ア ×j ← j−10×k は一の位(35なら5)だけを残し、十の位kを足し忘れる。手順(2)の『各桁の数字を合計』に反し、j=35で5となり誤り。
イ ○while内に入った時点でjは桁の数字の合計値(2桁になりうる)。k ← j÷10の商はjの十の位の数字である。手順(2)はjの各桁の数字を足すことなので、十の位kと一の位を足す必要がある。一の位はj−10×kで求まる。よって新しいjは k+(j−10×k) となり、イが正しい。検算:j=35ならk=3、3+(35−30)=8で正しく桁和が得られる。
ウ ×j ← k+(j−10)×k は演算順序が誤り。j=35では3+(35−10)×3=3+75=78となり、本来の桁和8と全く異なる。
エ ×j ← k+j は元のjをそのまま足してしまう。j=35では3+35=38となり桁和8にならず、ループも縮小しない。
アルゴリズムとプログラミングの他の問題
この問題の「深掘り・誤答の完全解説・試験のコツ・覚え方」はアプリで。
無料ではじめる →ITパスポート試験の全問を、一問ごとにAIの8-ways解説つきで。SRS暗記カード・全真模試・弱点診断まで。まずは無料で。
ukamiru 過去問 · ITパスポート試験 · itpass-r4k-q78
