第55問 いちばん安いのはいくら?(最小値をさがす)
5つの店の値段を配列 nedan(=[320,280,350,260,300])に入れました。この中でいちばん安い値段を見つけて表示しよう。saiyasu に「今のところ一番安い値段」を入れておき、店を1つずつ見ながら、それより安ければ saiyasu を入れかえます。1つ目の店はもう saiyasu に入っているので、くり返しは i = 1(2つ目の店)から始めます。ポイントは saiyasu の最初の値です。合計を数えるときのように 0 から始めてよいか、よく考えよう(2か所の穴をうめよう)
難易度:★★★☆☆(3/標準)。単元:条件分岐・繰り返し・配列。共通テスト「情報I」で使われるDNCL(共通テスト用プログラム表記)の穴埋め問題です。JavaScriptを有効にすると、このページでプログラムを組み立てて実行しながら解けます。
プログラム
nedan = [320,280,350,260,300]
saiyasu = [A]
i を 1 から 4 まで 1 ずつ増やしながら繰り返す:
もし nedan[i] [B] saiyasu ならば:
saiyasu = nedan[i]
表示する("いちばん安いのは" + saiyasu + "円です")
空欄 [A]・[B] に当てはまるものを、次の選択肢から選びます。
選択肢
ヒント
最小値さがしは「まず1つ目を仮のチャンピオンにして、あとから来た相手が強ければ(安ければ)入れかえる」と考えます。だから saiyasu = nedan[0] から始め、くらべる相手は2つ目(i = 1)から。もし nedan[i] < saiyasu なら入れかえます。合計のように 0 から始めると、0 より安い店は無いので 0 のまま終わってしまいます。答えは 260 円です
解答
- 空欄 [A] …
nedan[0]
- 空欄 [B] …
<
よくある間違い
- [A]
nedan[0] [B]> … スタートの値は正しいのですが、> だと「今より高ければ入れかえる」になり、いちばん高い 350 円が残ってしまいます。さがしたいのは安い方なので、< を使って「今より安ければ入れかえる」にしましょう
- [A]
nedan[0] [B]== … == は「等しいか」を調べる記号なので、安いか高いかをくらべられません。320 円とちょうど同じ値段の店は2つ目から先にないので、入れかえは一度も起きず、saiyasu は 320 のまま終わります
- [A]
0 [B]< … 合計を数えるときのくせで 0 から始めると失敗します。0 より安い店は1つもないので、if の中が一度も実行されず、答えは 0 円のままです。最初は「1つ目の店の値段」= nedan[0] を入れておきましょう
- [A]
0 [B]> … 2か所とも違います。0 から始めて > でくらべると、どの店も 0 より高いので入れかえが起こり続け、最後にはいちばん高い 350 円が残ります
- [A]
0 [B]== … 0 と等しい値段の店はないので、if の中は一度も実行されません。答えは 0 円のままです。最初の値は nedan[0]、くらべる記号は < です
- [A]
100 [B]< … 100 は「どの店よりも安い値段」なので、100 より安い店が見つからず、答えは 100 円になってしまいます。実際には売っていない値段を勝手に置くのではなく、nedan[0] を入れておくのが確実です
- [A]
100 [B]> … 2か所とも違います。100 から始めて > でくらべると、どの店も 100 より高いので入れかわり続け、いちばん高い 350 円が残ります
- [A]
100 [B]== … ちょうど 100 円の店はないので入れかえが起こらず、答えは 100 円のままです。最初は nedan[0](=320)を入れ、< で「もっと安い店」をさがしましょう
この単元の解説動画
ほかの問題