過去問解きまくり研究所 ホーム

令和4年度 問78

アルゴリズムとプログラミング

チェックデジットに関する問題

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

〔手順〕

〔プログラム〕

○整数型: 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 ← k + (j - 10 × k)

解説

各桁を足すので、十の位であるkと一の位との和を入れます。

この関数は、配列に入った9桁ぶんの数字を全部足し、その合計が9より大きいあいだ、各桁の数字を足す操作をくり返して、9以下になった値をチェックデジットとして返します。合計は最大でも9が9個で81ですから、二桁を超えることはありません。プログラムの中でjを10で割った商をkとしているので、kはjの十の位そのものです。すると一の位は、jから10かけるkを引いた値になります。この二つを足したものが、桁を足し合わせた新しいjですから、空欄にはkとその差の和を入れることになります。式にすると、kにjから10かけるkを引いた値を足す形です。くり返しの条件はjが9より大きいあいだで、合計が79なら7と9を足して16になり、もう一度回って1と6を足した7で止まります。この問では最大で二度回ります。よって当てはまるのは、kにjと10かけるkの差を足す式です。

ほかの選択肢はなぜ違うのか

出典:令和4年度 ITパスポート試験 問78(改変:原典の図表をテキストに書き起こした)

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)