こんなことが学べます!
✅ 共通テスト2025 情報Ⅰのプログラミング問題(第3問)問2「カ」「キ」「ク」の解説
✅ Luaで実際にコードを書いて問題を解く体験
✅ 大学入試レベルのプログラミング思考を身につける
※問3の解説は別日に予定していますが、 プログラミング問題(第3問)の全問題の解説を知りたい方は、以下のページをご覧ください。
🔗 共通テスト2025 情報Ⅰ「第3問」プログラミング解説ページ
日時: 2025/02/22(土) & 2025/02/23(日) 17:30 ~ 18:30
場所: オンライン講座
対象: KIDSPROスクール生、KIDSPRO eラーニングをご利用の方
必要なもの: Webブラウザーにつながるパソコン
費用: 無料
※プログラミングも行いますので、myCompilerにアクセスしておいてください。
myCompiler は、オンラインで簡単にコードを書いて実行できる便利なツールで、C, C++, Java, Python, JavaScript(Node.js), Luaにも対応しています。
共通テスト2025 情報Ⅰ 第3問 問2(過去問)の解説
第3問 問2
第3問 問2の解答と解説
「カ」の正解・・・4
Akibi
という配列の添字(インデックス)が、部員の番号に対応していると理解していれば、Akibi[3] = 4
であることが分かります。
部員1の空き日はAkibi[1]
に格納されており、図1を見ると部員1の空き日は「5」日目なのでその値は「5」となります。同様に、部員2の空き日は「3」日目なのでAkibi[2]
には「3」が格納され、部員3の空き日は「4」日目なのでAkibi[3]
には「4」が格納されます。「カ」の答えは「4」です。
【工芸品4まで割当られた後の配列Akibiの内容
】
- 部員1の空き日・・・
Akibi[1]
👈️ 5日が格納 - 部員2の空き日・・・
Akibi[2]
👈️ 3日が格納 - 部員3の空き日・・・
Akibi[3]
👈️ 4日が格納
このときの配列Akibi
は、プログラミング言語ではAkibi[3] = [5, 3, 4]
のように表します。
「キ」の正解・・・① (Akibi[buin] < Akibi[tantou]
)
プログラムの問題「キ」を解く手順
次に、各変数の意味を確認しょう。ローマ字の変数名を確認する、その意味を推測しやすくなります。また、初期値として代入される値からも推測できると思います。
・Akibi = [5, 3, 4]
という配列は、工芸品4までを割り当てた後の各部員の空き日を格納している。部員1の空き日は5日、部員2の空き日は3日、部員3の空き日は4日。※問2の「カ」の問題を見ると詳細が分かります。
・buinsu
という変数は、部員の総数。※部員は3人なので、3が代入されている。
・tantou
という変数は、工芸品を担当する部員番号。1が代入されている。※つまり、担当部員を部員1に初期設定している。
・buin
という変数は、部員番号。※(04)行目で2が代入され、1ずつ増える。
(04) 行目の「部員番号(buin
)を2から部員の総数(buinsu
)まで1ずつ増やしながら繰り返す」は、部員2、部員3までを繰り返すfor文ということになります。変数の値を変化させながら繰り返し実行するコードをfor文と呼びます。
※部員番号(buin
)を1からでなく2からスタートしているのは、(03)行目でtantou
に1を代入して仮の担当部員を部員1としているためです。その後、(04)行目のfor文では部員2、部員3と順に比較して、for文が実行し終わったら担当部員が決定すると推測できます。
tantou = buin
」が実行される条件分岐(if文)です。ある条件が成立したときに、特定の処理を実行するコードをif文と呼びます。
tantou = buin
」は、担当部員(初期設定では部員1)を格納する変数tantou
に、部員番号が格納されている変数buin
を代入することを意味します。※プログラミングにおいて「
tantou = buin
」はtantou
とbuin
の値が等しいという意味ではなく、tantou
の値をbuin
の値に更新する(置き換える)ことを意味します。例えば、担当する部員(tantou
)が「1」、部員番号(buin
)が「2」のときに「tantou = buin
」を実行すると、担当する部員(tantou
)が部員1から部員2に変更されます。
手順5までの考察と割当の規則「最も早く空きになる部員が、空きになった日付から次の工芸品を担当する」から、(04)-(06)行目のプログラムは、担当する部員(tantou
)と部員番号(buin
)の空き日を比較し、部員番号(buin
)の部員の空き日が、担当する部員(tantou
)の空き日よりも早ければ(小さければ)、「tantou = buin
」を実行して担当部員を変更するコードと考えることができます。
Akibi[buin]
は部員番号(buin
)の部員の空き日、Akibi[tantou]
は担当する部員(tantou
)の空き日を示すので、「キ」の条件文でAkibi[buin] < Akibi[tantou]
の比較を行えばプログラムが完成します。つまり、「キ」の答えは①Akibi[buin] < Akibi[tantou]
です。
x = y
」はx
とy
の値が等しいという意味ではなく、x
の値をy
の値に更新する(置き換える)ことを意味します!
「ク」の正解・・・1
プログラムの問題「ク」を解く手順
「ク」の問題文を読むと、部員数(buin
)を5
、Akibi = [5, 6, 4, 4, 4]
に変更して、図4のプログラムを実行したとき、(06)行目の代入「tantou = buin
」が何回実行されるかを問う問題であることが分かります。
(06)行目の「tantou = buin
」は、「キ」の条件式Akibi[buin] < Akibi[tantou]
を満たしたときに実行されるので、部員数(buin
)を5
、Akibi = [5, 6, 4, 4, 4]
に変更して図4のプログラムを実行したとき、条件式Akibi[buin] < Akibi[tantou]
が何回成立するか考えてみましょう。
部員数(buin
)を5
、Akibi = [5, 6, 4, 4, 4]
の状態を図1のような割り当て図で示すと、以下のようになります。
各変数の意味を確認しましょう。変数名は意味ある名前に設定されているため、ローマ字の変数名を確認すると、その意味を推測しやすくなります。
・Akibi = [5, 6, 4, 4, 4]
部員1の空き日は5日、部員2は6日、部員3は4日、部員4は4日、部員5は5日。
・buinsu = 5
部員の総数。
・tantou = 1
担当部員を部員1に初期設定する。
・buin
部員番号。

(04)-(06)行目ののfor文を各ステップで確認しましょう。
for文の前に実行する前に、(05)行目で仮担当を部員1と初期設定しているので、部員2からfor文が実行されます。
ステップ① 部員2の空き日:6日 vs 仮担当部員1の空き日:5日 👉 仮担当部員1の方が小さい(早い)
ステップ② 部員3の空き日:4日 vs 仮担当部員1の空き日:5日 👉 部員3の方が小さい(早い)
ステップ③ 部員4の空き日:4日 vs 仮担当部員3の空き日:4日 👉 仮担当部員3の方が小さい(早い)
ステップ④ 部員5の空き日:4日 vs 仮担当部員3の空き日:4日 👉 仮担当部員3の方が小さい(早い)
tantou = buin
」の実行回数を確認手順3からステップ②のときだけ、条件式Akibi[buin] < Akibi[tantou]
が成立し(06)行目「tantou = buin
」の代入が実行されているのが分かります(仮担当部員が部員1から部員3に更新)。つまり、「ク」の答えは1回です。
🎯問題「キ」と「ク」のプログラムを実際にLuaやScratchでプログラミングしてみましょう!できるだけ問題のプログラムの形式と同じにしたかったので、配列の長さを返すlocal buinsu = #Akibi
は利用していないことご了承ください。


-- 各部員の空き日を表す配列(部員1が5日、部員2が3日、部員3が4日)
local Akibi = {5, 3, 4}
-- 部員の総数(local buinsu = #Akibiは使用せず)
local buinsu = 3
-- 最初は部員1を担当に設定
local tantou = 1
-- 部員2から順に比較
for buin = 2, buinsu, 1 do
-- もし現在の部員の空き日が、現在の担当の部員より早ければ(小さければ)担当を変更。
if (Akibi[buin] < Akibi[tantou]) then
tantou = buin
end
end
-- ↑for文の仕組み
-- 担当を部員1に設定してから、順番に他の部員と「<=」ではなく「<」で比較しているため、空き日が同じ場合には、番号の小さい部員が選ばれる。
-- 最も空き日が早い部員を担当として表示
print("次の工芸品の担当は部員" .. tantou .. "です")
-- 各部員の空き日を表す配列(部員1が5日、部員2が6日、部員3が4日、部員4が4日、部員5が5日)
local Akibi = {5, 6, 4, 4, 4}
-- 部員の総数(local buinsu = #Akibiは使用せず)
local buinsu = 5
-- 最初は部員1を担当に設定
local tantou = 1
-- 代入回数を記録する変数(初期値0)
local dainyu = 0
for buin = 2, buinsu, 1 do
-- 各ステップで部員と担当候補の部員の空き日を出力
print("部員"..buin,Akibi[buin],"担当候補の部員"..tantou,Akibi[tantou])
if (Akibi[buin] < Akibi[tantou]) then
tantou = buin
-- 「担当の変更が発生した回数」を記録
dainyu = dainyu + 1
end
end
print("次の工芸品の担当は部員"..tantou.."です")
print("代入回数は"..dainyu.."です")
※動画説明ではRoblox Studioを使ってLuaプログラミングを行いましたが、すぐにプログラミングをしたいと言う方にはmyCompilerがおすすめです。問題を解くだけでなく、実際にプログラミングしてみると楽しいですよね。
myCompiler は、オンラインで簡単にコードを書いて実行できる便利なツールで、C, C++, Java, Python, JavaScript(Node.js), Luaにも対応しています。
1. 変数名や関数名にスペルミスがないか確認しましょう。
2. for文やif文の構成が正しいか確認しましょう(luaであればdo, then, endの位置や個数に注意)。
3. 誤って全角文字を使っていないか確認しましょう。
4.「=」と「 – 」が間違っていないか確認しましょう。
5.「 [ 」「 { 」「 ( 」が間違っていなか確認しましょう。
プログラミング問題(第3問)の徹底解説!
※luaとScratchによるコードも記載してありますので、ぜひ御覧ください。