大学入学共通テスト(情報) 過去問
令和5年度(2023年度)本試験
問43 (<旧課程>情報関係基礎(第3問) 問11)

このページは閲覧用ページです。
履歴を残すには、 「新しく出題する(ここをクリック)」 をご利用ください。

問題

大学入学共通テスト(情報)試験 令和5年度(2023年度)本試験 問43(<旧課程>情報関係基礎(第3問) 問11) (訂正依頼・報告はこちら)

次の文章を読み、問いに答えよ。

Aさんは、天井から地上まで吊り下げられたロープをキャラクターに順次飛び移らせてゴールを目指すゲーム(図1)を遊んでいる。ロープは全部で11本あり、一列に並んでいる。ゲームはキャラクターが1本目のロープの高さ55mの地点にいる状況から始まり、11本目のロープの高さ0mの地点がゴールである。キャラクターができることは、ロープを降りることと、同じ高さのまま次のロープに飛び移ることの二つのみであり、ロープを登ったり、前のロープに戻ったりすることはできない。各ロープには1か所ずつリボンが巻かれており、キャラクターがこのリボンに触れるたびに得点を1点獲得できる。各ロープにリボンが巻かれている高さ(以下、リボンの高さと呼ぶ。)はあらかじめ決まっており、表1のとおりとなっている。ゴールに到達して最後のリボンの得点を加えたゲーム終了時の得点をできるだけ高くするため、Aさんは手続きを作成して、どのようにキャラクターを動かしたらよいか検討することにした。

(1)Aさんは手始めとして、全部で11本のロープで合計55m降りるのだから、各ロープを5mずつ降りるという動かし方を考えた。このゲームはロープの降り始めや降り終わりでもリボンに触れたとみなすので、1本目のロープで55mから50mまで降りるときは、55mの高さのリボンに触れたこととなり、1点獲得できる。2本目では50mから45mまで降りるが、ここではリボンに触れない。また、6本目では( アイ )mから( ウエ )mまで降りるが、ここでもリボンに触れない。
この動かし方での得点を求めるためにAさんが作成した手続きが図2である。なお、各ロープにおけるリボンの高さは配列Ribonに格納されており、Ribon[i]はi本目のロープのリボンの高さを表す。また、変数tokutenには得点を、変数takasaにはキャラクターが今いる高さを格納する。手続きを実行し、ゲーム終了時の得点は( キ )点であることがわかった。

図2 5mずつ降りるときの得点を求める手続き

(01)tokuten←0
(02)takasa←55
(03)iを1から11まで1ずつ増やしながら,
(04)│ もし( オ )ならば
(05)│  │ tokuten←tokuten+1
(06)│ を実行する
(07)│ takasa←( カ )
(08)を繰り返す
(09)「得点は」とtokutenと「点」を表示する

(2)Aさんは、(1)の動かし方では1本目のロープでリボンに触れた後に5m降りたことで、2本目のロープのリボンに触れ損ねて損をしていることに気がついた。そこでAさんは毎回5m降りるという動かし方をやめ、次の新しい動かし方を考えた。

【新しい動かし方】
キャラクターが今いるロープでリボンに触れることができるときは、リボンの高さまで降りてリボンに触れた後に次のロープに飛び移る。そうでないときは、ロープを降りずにそのまま次のロープに飛び移る。これを最後のロープまで順次繰り返す。
この動かし方での得点を求めるために作成した手続きが図3である。

図3 新しい動かし方での得点を求める手続き

(01)tokuten←0
(02)takasa←55
(03)iを1から11まで1ずつ増やしながら,
(04)│ もし[ ク ]ならば
(05)│  │ tokuten←tokuten+1
(06)│ takasa←( ケ )
(07)│ を実行する
(08)を繰り返す
(09)「得点は」とtokutenと「点」を表示する

手続きの流れを確認するため、表2を用意して、図3の(07)行目の直後におけるi,tokuten,takasaの値を記録した。その結果、i=4のときのtokutenの値は( コ )、takasaの値は( サシ )であった。手続きを実行し、ゲーム終了時の得点は( ス )点であることがわかった。
表2を眺めていてAさんは、あるロープで降りすぎると、その後の複数のロープのリボンに触れ損ねて損をすることがあると気がついた。そこで、新たに定数GENDO(単位はm)を導入し、リボンに触れるためにGENDOm以上降りる必要があるときはロープを降りずにそのまま次のロープに飛び移るように動かし方を改めることにした。ただし、最後のロープではリボンの高さである0mまで必ず降りることとする。試しにAさんはGENDOの値を20としたうえで、図3の(04)行目の[ ク ]を( セ )と書き換えて手続きを実行した。その結果、ゲーム終了時の得点は( ソ )点となることがわかった。

( セ )にあてはまるものを次のうちから1つ選べ。

問題文の画像
  • [ ク ] かつ takasa−Ribon[i]<GENDO かつ i≠11
  • ([ ク ] かつ takasa−Ribon[i]<GENDO) または i=11
  • ([ ク ] または takasa−Ribon[i]<GENDO) かつ i≠11
  • [ ク ] または takasa−Ribon[i]<GENDO または i=11

次の問題へ

正解!素晴らしいです

残念...

この過去問の解説 (3件)

01

条件を整理すると、

・キャラクターが今いるロープでリボンに触れることができる[ ク ]
かつ
・リボンに触れるためにGENDOm以上降りる必要がない

  :takasa−Ribon[i]<GENDO

または
・最後のロープではリボンの高さである0mまで必ず降りることとする。i=11

 

つまり、

([ ク ] かつ takasa−Ribon[i]<GENDO) または i=11
となります。
 

参考になった数0

02

まず、クに入る条件として、

新しい動かし方で、

キャラクターが今いるロープで「リボンに触れることができる」とは、「今の高さより下(または同じ高さ)にリボンがある」ということです。

この場合、キャラクターは必ずリボンまで降りて触れてから、次のロープに飛び移ります。

 

一方、「リボンに触れることができない」とは「今の高さより上にリボンがある」ということです。

この場合、キャラクターは降りずに、そのまま次のロープに飛び移ります。

 

 

手続きの(04)行目では「もし( ク )ならば」とあり、(05)行目で得点を加算しています。

つまり、( ク )には「得点が入る条件」を入れることになります。

得点を獲得できるのは「リボンの高さがキャラクターの今いる高さ以下」のときです。

 

 

問題文より、

・ Ribon[i] は「i本目のロープのリボンの高さ」

・ takasa は「キャラクターが今いる高さ」

 

であるため、条件式は Ribon[i] ≦ takasa となります。


となるため、選択肢はそれぞれ

・ Ribon[i] ≦ takasa かつ takasa−Ribon[i]<GENDO かつ i≠11

Ribon[i] ≦ takasa かつ takasa−Ribon[i]<GENDO) または i=11

Ribon[i] ≦ takasa または takasa−Ribon[i]<GENDO) かつ i≠11

・ Ribon[i] ≦ takasa または takasa−Ribon[i]<GENDO または i=11

となります。

 

Aさんは、リボンに触れるために降りる距離(takasa - Ribon[i])が定数 GENDO 以上になる場合は、「降りずにそのまま次のロープに飛び移る(=加点しない)」というルールを追加しました。

 

「ただし、最後のロープではリボンの高さである0mまで必ず降りることとする」という記述があります。これは、i = 11 のときは、上記の GENDO による制限に関わらず必ず加点するということを意味します。

 

これらを論理式としてまとめると、以下のようになります。 「(通常の加点条件を満たす)または(最後のロープである)」

 

 (takasa >= Ribon[i] かつ takasa - Ribon[i] < GENDO) または i = 11

選択肢1. [ ク ] かつ takasa−Ribon[i]<GENDO かつ i≠11

Ribon[i] ≦ takasa かつ takasa−Ribon[i]<GENDO かつ i≠11

 

i = 11 のときに加点されなくなってしまうため、不適切です。

選択肢2. ([ ク ] かつ takasa−Ribon[i]<GENDO) または i=11

正しい条件式です。

 

Ribon[i] ≦ takasa かつ takasa−Ribon[i]<GENDO) または i=11

 

この条件式は、リボンがキャラクターより下にあり、かつ、リボンが限度値より上にある、

または、iが11である。

 

となり、この場合に得点を加算する。という手続きになります。

 

前半のカッコ内で「降りる距離が制限内のとき」を判定し、後半の または i = 11 で最後のロープの例外処理をカバーしており、適した条件式となります。

選択肢3. ([ ク ] または takasa−Ribon[i]<GENDO) かつ i≠11

Ribon[i] ≦ takasa または takasa−Ribon[i]<GENDO) かつ i≠11

 

「または」を使っているため「限度に関係なく加点」されてしまいます。また、「かつ i ≠ 11」とあるため、必ず降りるべき11本目のロープで、この条件式全体が「偽(加点しない)」になってしまうため、不適切です。

選択肢4. [ ク ] または takasa−Ribon[i]<GENDO または i=11

Ribon[i] ≦ takasa または takasa−Ribon[i]<GENDO または i=11

 

すべてが「または」でつながれているため、どれか1つでも満たせば正となり、本来加点できないケース(リボンが今の高さより上にある場合など)でも加点されてしまうため、不適切です。

参考になった数0

03

Aさんは新しい条件 「GENDO 以上降りる必要があるときだけ降下」 を追加したので、

リボンに触れる条件は以下になります。


(ク) かつ(現在高さ − Ribon[i] < GENDO)
ただし、

「i=11(最後のロープ)」だけは必ず降下する(0m に到達のため)

よって

((ク) かつ  takasa − Ribon[i] < GENDO)   または   i = 11
となります。

参考になった数0