ここから本文です

高校一年生です。科学の甲子園に出場することになり過去問を解いてみたのですが、...

nun********さん

2018/9/2401:00:03

高校一年生です。科学の甲子園に出場することになり過去問を解いてみたのですが、第七回科学の甲子園の筆記試験第12問の1問目がわかりません。第12問中のほかの問題は分かったのですが・・・。

解説を見てもそれに関する記述はなく、いくら試行錯誤しても解答と同じ答えがでません。
分かりやすい解説お待ちしております。m(__)m
問題用紙です。http://koushien.jst.go.jp/koushien/tournament/2017/img/2018_pdf/1-1...

閲覧数:
157
回答数:
2
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

ter********さん

2018/9/2413:27:35

問題:
「右にn秒進み、左にn秒進む」という動きを繰り返す時の、nはいくつか

答え:
nは3


準備:
問題内容の解釈は、次のように変更した。(※1)

①黒い部屋の左右に、白い部屋が無限に並んでいる状況は、添付図の横軸のように、「座標=0」の左に「座標=-1、-2、・・・」が、右に「座標=+1、+2、・・・」が並んでいる状況に置き換える。

②行動の「右に行く」は「座標に1をプラス」、「左に行く」は「座標から1をマイナス」と考える。

③時刻は、添付図の縦軸。各時刻にロボットがいる部屋(座標)は点で示す。
問題の中の、「例えば」と書かれたプログラム記述の手前には『また「j秒前」が動作開始(時刻0)以前を指す時は黒だった』とあるので、座標0を通る縦軸上の「t=-1、-2、・・・」にも、点が存在する。

④説明しやすいように、プログラムの行ごとに「コマンド1、コマンド2、・・・」を意味する1、c2、・・・という名前をつける。

c1:1黒→左
c2:5黒→右
c3:4黒→右
c4:→左

各時刻におけるロボットの移動は、添付図上の→で表し、どのコマンドによる移動かは→の始点にコマンド名を記した。

⑤時刻tにおける、ロボットの位置をP(t)で表した時、コマンド動きを疑似言語で書くと、次のようになる。(※2)

c1:if(P(t-1)==0) then P(t+1)=P(t++)-1
c2:if(P(t-5)==0) then P(t+1)=P(t++)+1
c3:if(P(t-4)==0) then P(t+1)=P(t++)+1
c4: else P(t+1)=P(t++)-1

なお、t++は、このコマンド行の実行終了後に、tの値に1を加算しなさいという、プログラム言語Cの表現。
疑似言語の「P(t+1)=P(t++)-1」は、文章で書くと「1秒後の座標位置=今の座標位置―1」。


解説:
t=0では、コマンドc1の下記条件が満たされたため、「-1」の移動。
「時刻=t-1=0-1=-1」における、点の位置が0(添付図の紫枠)

t=1では、コマンドc1の下記条件が満たされたため、「-1」の移動。
「時刻=t-1=1-1=0」における、点の位置が0(添付図のオレンジ枠)

t=2では、コマンドc1の条件は満たされず、c2の下記条件が満たされるので「+1」の移動。
「時刻=t-5=2-5=―3」における、点の位置は0
(c3も満たされるが、c2の方が早い)

t=5では、コマンドc1の条件が満たされるので、「-1」の移動。
(c2も満たされるが、c1の方が早い)

t=6では、1秒前、4秒前、5秒前のいずれも「座標≠0」なので、命令c4に従い「-1」の移動。

t=8では、コマンドc3の下記条件が満たされたため、「+1」の移動。
「時刻=t-4=8-4=4」における、点の位置が0(添付図のピンク枠)

t=9の後ろには、t=3からt=7までのサイクル(※3)が反復して表れる。


※1.部屋の色が黒か白かを座標に変えたり、「右に行く」「左に行く」を「+1」「-1」に変えたのは、問題文のままだと、添付図のイメージを浮かべにくかったという、個人的な理由から。
問題文のままでも考えられるなら不要であり、「このように解釈し直すべき」という意味ではない。

※2.疑似言語への置き換えも、30年以上もプログラム開発の仕事についていたせいか、問題文のプログラムもどきな記述まだと、考えにくかったから。
「疑似言語に置き換えて考えなさい」という意味ではない。

※3.ただし、「t=3からt=7までのサイクル」の中のt=4では、c2の条件範囲に「t<0」が含まれたため、c3ではなくc2が実行された。
しかし、t=9以降の反復サイクルでは、t=10のコマンド実行のように、条件範囲に「t<0」は含まれないので、c3が実行される。

問題:
「右にn秒進み、左にn秒進む」という動きを繰り返す時の、nはいくつか

答え:
nは3...

  • ter********さん

    2018/9/2413:31:34

    補足に書いたように、「右に行く」「左に行く」を「+1」「-1」に変えて解釈するようにした後も、ついウッカリと向きを間違えることが何度かありました。

    念のため、回答に書いた内容を再検証してください。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この質問は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

duf********さん

編集あり2018/9/2411:38:21

エクセル(かなにかの)上に書いてみると分かりやすいと思います。

例えば、一行目には[…○○○●○○○…]
とひとセルにひとつずつマルを打ち込んで、n(>1)行目には「時刻(n-2)秒でのロボットの位置」に対応するセルに☆を打ち込む、などとすると分かりやすいのではないでしょうか。

どちらが左でどちらが右かも打ち込んでおくと、間違えにくくて良いと思います。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる