![]()
平成23年 春期 基本情報技術者 午後 問08
問08 必須問題次のプログラムの説明及びプログラムを読んで,設問に答えよ。 N 個の要素中から K 個の要素を選ぶ組合せをすべて求める。例えば,5個の要素中から 3個の要素を選ぶ組合せの場合,計 10 通りある組合せをすべて求める。 プログラムでは,N 個の要素(要素番号 1 〜 N )からなる配列 S を用意し,このうち K 個の要素には 1を,残りの要素には0を設定することによって,組合せの一つを表現する。 例えば,図1(1) のように5個の要素1〜5中から3個の要素2,4,5を選んだ状態は, プログラム中では図1(2) のとおりに表現する。 ![]() 図1 5個の要素中から3個の要素を選ぶ例とそのプログラム中での表現 プログラムは,主プログラム Main 並びに組合せを求めるための 関数 Init 及び Next からなる。 主プログラム Main
整数型関数: Init (整数型:S[ ],整数製:N,整数型:K) 引数:S[ ] は出力用,N 及び K は入力用の引数である。 機能:1 ≦ K ≦ N の場合,配列Sの先頭から K 個の要素に1を,続く N−K 個の要素に 0 をそれぞれ 設定し,返却値として 0 を返す。それ以外の場合,配列 S には値を設定せずに,返却値として−1を返す。 整数型関数: Next (整数型:S[ ],整数型:N) 引数:S[ ] は入出力用,N は入力用の引数である。 機能:渡された配列 S の先頭から N 個の要素には,直近に求めた組合せの状態が 設定されている。この渡された組合せの状態に対して所定の操作を行い,次の組合せの状態を 求めて配列 S に設定し,返却値として 0 を返す。ただし,渡された組合せの状態が,この関数の アルゴリズムで得られる最終形である場合,配列 S には値を設定せずに,返却値として−1を返す。 〔プログラム〕 ![]() ![]() (1) 主プログラム Main で,配列 S に組合せの一つの状態が得られるたびに,配列 S の内容を 印字したい。印字には次の副プログラムを用いる。 副プログラム Dump (整数型:S[ ],整数型:N)
機能:配列 S の先頭から N 個の要素に格納されている値を,1行に印字する。
そのためには,主プログラム Main のαの部分を
(2) 関数 Next は,受け取った配列 S を要素番号の小さい方から検査し,連続する2要素の
値が
(3) このプログラムを実行して,関数 Init が関数 Next から呼ばれるとき,関数 Init が受け取る
N の値の範囲は
(4) 主プログラム Main の実行終了時点において,配列 S の要素番号 1 〜 5 の内容は
a に関する解答群 ![]() b に関する解答群
c に関する解答群
d に関する解答群
e,f に関する解答群
オ 2 〜 4 カ 2 〜 5 g に関する解答群
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ] |