平成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要素の 値が に見つかったものについて,その内容を入れ替える。 続いて,配列 S の一部でその2要素 の部分について 関数 Init を呼ぶ。例えば,関数 Next の実行開始時点で,配列Sの要素番号 1 〜 5 の内容が 1,0,1,0,1 であったとき,実行終了時点での配列Sの要素番号 1 〜 5 の内容は となる。 (3) このプログラムを実行して,関数 Init が関数 Next から呼ばれるとき,関数 Init が受け取る N の値の範囲は ,K の値の範囲は である。 したがって,関数 Init が受け取るNとKの値は,1 ≦ K ≦ N を満たさない場合がある。 (4) 主プログラム Main の実行終了時点において,配列 S の要素番号 1 〜 5 の内容は となっている。 a に関する解答群 b に関する解答群
c に関する解答群
d に関する解答群
e,f に関する解答群
オ 2 〜 4 カ 2 〜 5 g に関する解答群
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
|