ITパスポート 令和7年度 問78:algorithmに関する問題
手続calcMod3を呼び出したときの出力はどれか。[プログラム] ○calcMod3() 整数型: totalValue, i totalValue ← 0 for (i を 1 から 7 まで 1 ずつ増やす) if (i ÷ 3 の余り が 0 と等しい) totalValue ← totalValue + i endif endfor totalValue を出力する
- a2
- b3
- c7
- d9正答
AI解説(初心者・標準・上級)
理解度に合わせて3レベルの解説を無料で読めます。
答えは d「9」 です。
このプログラムは、1から7までの数を順番に見て、「3で割り切れる数」だけを足していきます。
1〜7の中で3で割り切れるのは 3と6 の2つだけ。
3 + 6 = 9 になるので、答えは9です。
👉 覚え方:「3で割った余りが0=3の倍数」。1〜7の3の倍数は3と6だけ。
ほかの選択肢:a・b・cはどこかで数えそこねた値。3の倍数を全部拾って足す、と確認すれば9になります。
なぜこれが正解か
正解は d「9」。プログラムはtotalValueを0から始め、iを1〜7まで動かし、「iを3で割った余りが0(=3の倍数)」のときだけtotalValueにiを加える。1〜7で3の倍数は3と6。0+3+6=9。
各選択肢の解説
- a 2/b 3/c 7:いずれも3の倍数を取りこぼした、または別の集計をした誤り。
- 例えば3だけ足すと3、3+6+足し違いで7、などのミスに対応するダミー。正しくは3と6の両方を足す。
覚え方・ひっかけ注意
「3で割った余りが0」=3の倍数と即変換するのがコツ。ループ範囲が1〜7(7も含む)である点、条件は“余り0”で“割り切れる”ことに注意。トレース(i=1から順に余りを書き出す)すれば確実:3と6だけがヒットして合計9。
理論的背景
本問はforループとif条件分岐を組み合わせたアルゴリズムのトレース問題であり、正解はdの9である。プログラムの動作を正確に追跡するトレース能力が問われる。
実行トレースを詳述する。totalValue ← 0で初期化。iを1から7まで1ずつ増やすforループを実行する。i=1: 1÷3の余り=1(0でない)→条件不成立・加算なし。i=2: 2÷3の余り=2(0でない)→条件不成立。i=3: 3÷3の余り=0(0と等しい)→totalValue=0+3=3。i=4: 4÷3の余り=1→条件不成立。i=5: 5÷3の余り=2→条件不成立。i=6: 6÷3の余り=0→totalValue=3+6=9。i=7: 7÷3の余り=1→条件不成立。ループ終了。totalValue(9)を出力。
この問題の本質はモジュロ演算(剰余演算)の理解である。「i÷3の余りが0」とは「iが3の倍数」を意味する。1〜7の範囲で3の倍数は3と6のみである。したがってtotalValueは3+6=9となる。誤答選択肢の分析:aの2は何を誤算したか不明、bの3は「最初に条件を満たすi=3のみ加算した場合」、cの7は「i=7のみを返したと誤解した場合」に対応すると考えられる。
実務での使われ方
モジュロ演算(余り計算・mod演算)はプログラミングの実務で極めて頻繁に使用される基本的な算術演算であり、多様な応用がある。
奇数・偶数判定:`i % 2 == 0` で偶数、`i % 2 != 0` で奇数を判定する。これはデータの交互処理・縞模様テーブルのCSS適用(CSS nth-child)・ページネーション(偶数ページのみ特殊処理)など至る所で使われる。ループの周期処理:`i % N == 0` で「N回ごとに処理」を実現する。バッファのフラッシュ・進捗表示(1000件ごとに進捗をログ出力)・定期サンプリングなどに活用する。ハッシュ関数:`key % tableSize` でハッシュテーブルのバケットインデックスを計算する。分散ストレージのシャーディング(data % N個のノードのどこに保存するか)もモジュロ演算で実現する。循環バッファ(リングバッファ):`(index + 1) % bufferSize` でインデックスが終端を超えた際に先頭に折り返す。キュー実装・ストリーム処理・ネットワークパケットバッファなどで使われる。
試験での位置づけ
ITパスポートのアルゴリズム問題はテクノロジ系でほぼ毎回出題される分野であり、forループ・while ループ・if分岐・変数のトレースという基本要素の組み合わせで構成される。本問のような「forループ内のif条件で累積加算する」パターンは最頻出の問題形式の一つであり、手でトレースする練習を反復することが確実な正答率向上につながる。試験でのトレース問題の解き方として「変数の値を横に書きながら1ステップずつ追う」という手法が有効であり、本問の場合は「i」「totalValue」「i÷3の余り」「条件成立か否か」を表にして追うと正答を導きやすい。
基本情報技術者試験ではより複雑なアルゴリズム(再帰・ソートアルゴリズムの計算量・スタック・キューを使った処理・文字列操作)が擬似コードで出題される。アルゴリズムと計算量(O記法:O(N)・O(N²)・O(log N)等)の理解が求められる。ITパスポートシラバスVer.6.0では「プログラミング的思考力」が新たに強調されており、アルゴリズム問題の比重が高まる傾向がある。
選択肢の発展補足
選択肢bの3を選んだ受験者はおそらく「i=3の時のみ条件が成立する」と誤解している。ループの上限がi=7に設定されており、i=6(6÷3=2余り0)も条件を満たすことを見落とすのが典型的な誤答パターンである。ループのトレースで「途中で止まらずに最後まで実行することを確認する」という習慣が正答への鍵となる。mod演算(剰余演算)の注意点として、プログラミング言語によっては負の数のmod演算結果が異なる場合がある(Python:-7 % 3 = 2 / C言語:-7 % 3 = -1)が、本問は正の整数のみを扱うため言語依存の問題は生じない。本問の問題設定は「ITパスポートの擬似コード記法」に基づいており、実際の特定プログラミング言語の構文ではなく概念的な記述として読む必要がある点も確認しておく。
出典:IPA(情報処理推進機構)公式 ITパスポート試験 令和7年度 問78/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。