第4回演習問題


問1(基礎):入力された5個の浮動小数点数を読み込み,それらの平均を返すavg()という関数を作りなさい.

問2(基礎):月,日を読みこみ,その年における経過日数を表示せよ.
この時,int countday(int month)という,月を引数として渡すとその月が何日まであるかを返値として返す関数を利用せよ.
(うるう年は無視し,2月は28日間,4,6,9,11月は30日間,それ以外の月は31日間あるものとする)
出力例:
月:2
日:15
--> 46日

問3(基礎):フィボナッチ数列Fiの第1項から第n項までを出力するプログラム.
(関数の再帰呼び出しを用いて実現せよ)
フィボナッチ数列の定義は以下のとおり
F1 = 1, F2 = 1, Fi = Fi-1 + Fi-2(i>2)
従って
F1 = 1
F2 = 1
F3 = F2 + F1 = 1 + 1 = 2
F4 = F3 + F2 = 2 + 1 = 3
F5 = F4 + F3 = 3 + 2 = 5

問4(応用):前問を,関数の再帰呼び出しを使わずに実現せよ.

問5(応用):入力された5桁の正の整数値(10000〜99999の範囲)の各桁を,
5枚のトランプとみなし,ポーカーで言うところのストレートの役が出来ているかどうかを判定するプログラムを書きなさい.
ストレートとは12345,のように5つの数字が一つの差で並んでい る状態を言い,35624などもストレートである.89012のよう に0で巡回するようなものはストレートではない.

問6(発展):数字当てゲームのプログラムを作れ
今回の数字当てゲームは4桁の数字を当てるもので,例えばMagic Numberが2751で入力した数字が2137だった場合,数とその位置が全く同じものが1つ(千の位の2),位置は違うが同じ数字が2つ(1と7)あるので,1ストライク2ボール,と表示するものとする.
ユーザはこの情報を元に10回以内にMagic Numberを当てればよい.なお,Magic Numberおよびユーザの入力する4桁の数字には,同じ数が2回以上出てこないと仮定してよい.

問7(発展):問6の数字当てゲームのMagic Numberを生成する際にrand()を利用するプログラムを書け(シードはユーザが最初に入力する).また入力する数字が4桁であることを保証し,rand()によって生成されるMagic Numberとユーザが入力する数字の両方において2235のように同じ数字が二つ以上出てくることが無いようにすること.

問8(発展):m個のみかんをn人に分ける「分け方」を求め,表示するプログラムを作成せよ.各自の取り分は1個以上とすること.例えば,5個のみかんを3人でわける方法は,1 1 3, 1 2 2, 1 3 1, 2 1 2, 2 2 1, 3 1 1の6通りである.
ヒント:この問題をorange(m, n) とすると,1人目がc個のみかんを取った場合,残りm-c個のみかんをn-1人で分ける問題,すなわち,orange(m-c, n-1)になる.

masa-n@cs.kobe-u.ac.jp
(C) Masahide Nakamura, Kobe University