ITパスポート|アルゴリズムとプログラミング 問1
関数 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 は 2 桁の数です。k(j ÷ 10 の商)は十の位の数字、j − 10 × k は一の位の数字になります。手順(2)の“各桁の数字を合計する”は、この二つを足すことです。j = 38 の場合(3 + 8 = 11 になるのが正しい)で確かめます。このとき k = 3 です。
- ア 38 − 30 = 8 で、一の位だけになり、十の位が足されません。
- イ 正解。3 +(38 − 30)= 11 で、各桁の数字の合計になります。
- ウ 3 +(38 − 10)× 3 = 87 で、正しくありません。
- エ 3 + 38 = 41 で、値が大きくなってしまい、繰返しが終わりません。
出典:令和4年度 ITパスポート試験 公開問題 問78(読点「,」を「、」に改変)