アルゴリズムの基本
変数 / フローチャート / トレース / 基本制御構造
アルゴリズムの基本
変数 / フローチャート / トレース / 基本制御構造
データ構造
配列 / スタック / キュー / リスト
基本制御構造は「順次」「選択」「繰返し」の3つ
スタックは後入先出の特徴を持ったデータ構造
キューは先入先出の特徴を持ったデータ構造
二つの変数xとyに対して,次の手続を(1)から順に実行する。処理が終了したとき,xの値は幾らになるか。(IP_H22秋_問69)
〔手続〕
(1) xに2を代入し,yに3を代入する。
(2) yの値から1を引いたものをyに代入する。
(3) xの値とyの値を加えたものをxに代入する。
(4) y≠1なら手続(2)に戻り,y=1なら処理を終了する。
ア 4
イ 5
ウ 7
エ 8
正解 イ
手続に従って,(1)から順に変数がどのように変化するかを辿っていきます。
(1) xに2,yに3を代入。
(2) この時点のyの値は3,3から1引いて2を新しくyに代入。
(3) この時点のxの値は2,yの値は2,2と2を足して4を新しくxに代入。
(4) この時点でyの値は2なので,(2)に戻る。
(2) この時点のyの値は2,2から1引いて1を新しくyに代入。
(3) この時点のxの値は4,yの値は1,4と1を足して5を新しくxに代入。
(4) この時点のyの値は1なので,処理を終了。
よって,xの値は5となります。
あるキューに要素“33”,要素“27”及び要素“12”の三つがこの順序で格納されている。このキューに要素“45”を追加した後に要素を二つ取り出す。2番目に取り出される要素はどれか。(IP_H23春_問58)
ア 12
イ 27
ウ 33
エ 45
正解 イ
キューは先に入ったものが先に取り出させる,先入先出のデータ構造です。
あるキューに,
33,27,12
の順に格納すると,この順番で取り出されます。
このキューに,さらに45を追加すると,
33,27,12,45
となります。
1番目に取り出されるのは33なので,2番目に取り出されるのは27です。
下から上ヘデータを積み上げ,上にあるデータから順に取り出すデータ構造(以下,スタックという)がある。これを用いて,図に示すような,右側から入力されたデータの順番を変化させて,左側に出力する装置を考える。この装置に対する操作は次の3通りである。(IP_H22春_問85改)
(1) 右側から入力されたデータをそのまま左側に出力する。
(2) 右側から入力されたデータをスタックに積み上げる。
(3) スタックの1番上にあるデータを取り出して左側に出力する。
この装置の右側から順番にX,Y,Zを入力した場合に,この(1)〜(3)の操作を組み合わせても,左側に出力できない順番はどれか。
ア X,Z,Y
イ Y,Z,X
ウ Z,X,Y
エ Z,Y,X
正解 ウ
この問題は,問題文の意味を理解するのが少し難しいかもしれません。
たとえば,X,Y,Zを操作(1)だけで左側に出力すると,入力した順番のままX,Y,Zと出力されます。
今度は操作(1)を使わずに,入力したX,Y,Zをそれぞれ(2)でスタックに積んでから,それぞれ(3)を使って出力すると,Z,Y,Xの順番で出力できます。
他にも,Xを(1)で出力し,Yを(2)でスタックに積み,Zを(1)で出力してから,Yを(2)で出力すれば,アのX,Z,Yの順で出力できます。
このように,(1)〜(3)の操作を組み合わせれば,様々な順番で出力できるのですが,中には出力できない順番が存在します。それを探せというのがこの問題です。
具体的には,ウのZ,X,Yの順番などです。まずZを出力するために,XとYを(2)を使ってスタックに積みます。その後に,Zを(1)で出力し,次にXを出力するために(2)を行おうとします。ただし,スタックにはXが下,Yが上で積まれているため,(2)を行うとXではなくYが出力されるため,Z,X,Yの順番では出力することができません。
なお,解答の導き方としては,アから順番に出力できるかどうかを確認していく方法が簡単だと思います。
講義動画の内容について質問があります。その場合、どのように質問すれば良いですか?
ご質問については、講義動画の下にあります「Facebookのコメント機能(※1)」または「Youtube側のコメント機能(※2)」をご利用ください。
頂いたご質問内容については、適宜、Q&Aに転用いたしますので、予めご了承ください。
※1 Facebookへのログインが必要です。
※2 Youtubeサイトへの移動が必要です。