問題
自然数を入力すると,1と2からなる列を表示するプログラムを考える.このプログラムに入力する自然数と表示される列の関係は次の通りである.一般に, を入力すると,を入力したときに表示される列の後にを入力したときに表示される列をつないだ列が表示される.つぎの各問に答えよ.
(1) 6を入力したときに表示される列を示せ.
(2) 空欄を埋めて,プログラムを完成させよ.ただし,表示される列の長さが10000を超える場合は扱えなくてもよいとする.また,270行のPRINT X(I);は,変数X(I)の値を表示し,改行しない命令である.
(3) を入力したときに表示される列に現れる1の個数をとするとき,,,の間に成立する関係式を求めよ.
% 空欄付きプログラム表はDB本文に含まれていない
方針
DB本文とローカルsource TeXの双方で,入力1・2に対する初期列と(2)の空欄付きプログラム表が欠落している。そのため(2)の空欄番号に対応する具体値は確定できない。解答では,欠落を明記したうえで,標準的な初期設定 と読む場合に(1)を示し,(3)は初期列の具体形に依存しない連結規則 から1の個数の漸化式を導く。
解答
(1)
DB本文では,「入力する自然数と表示される列の関係は次の通りである」とあるにもかかわらず,入力1,入力2に対する初期列の表が欠けている。したがって,本文だけからは6を入力したときの列を一意には確定できない。
以下,通常の設定として と読む場合を示す。 を を入力したときに表示される列とすると, で である。ここで右辺は,前の列の後ろに次の列をつなぐことを表す。
したがって であり, である。さらに だから, である。
(2)
DB本文には空欄付きプログラム本体が含まれていない。したがって,空欄番号ごとに入る命令や数値は,この本文だけからは確定できない。
ただし,実装の考え方は次の通りである。表示される列を配列 に保存するなら,まず入力1と入力2に対応する初期列を用意し, では の各項を順に に入れ,その後ろに の各項を順に入れればよい。最後に を順にPRINTすれば,連結規則に合う列が表示される。
しかし,問題が求めている「空欄を埋める」形式の答えは,欠落しているプログラム表の行番号・変数名・空欄番号に依存する。そのため,原表なしに具体的な空欄解答を作ることはできない。
(3)
を に現れる1の個数とする。 では であり,列をつないでも1の個数は和になる。したがって である。
添字を2つ進めると, に対して である。よって求める関係式は である。