f(0, m) = m f(1, m) = m + 1 f(n, m) = floor(f(n-1, m+1) + f(n-2, m+2)/2) ここで floorは切捨て関数。
たとえば
f(1, 4) = 5 f(2, 4) = floor(f(1, 5) + f(0, 6)/2) = 9となります。
次のn, mの組合せに対し、関数fの値を計算してください。ただし、あらかじ め答えをプログラム中に埋め込むことは禁止とします。
(1) n=35, m=35
(2) n=70, m=70
(3) n=100, m=100
入力
n m
出力
関数fの値
解答プログラムについて
各問題に関し異なるプログラムを作成、あるいは同一のプログラムで すべての問題に対処、どちらの選択も可です。
プログラミング言語
ANSI Cのみを仮定します。
順位について
(1)が正解していることを前提に(2)を採点します。同様に(2)ができている ことを前提に(3)を採点します。1問正解、2問正解、3問正解の順に順位が あがります。正解同数の場合は、それまでに計算に要した時間がより短い 方を上位とします。
精度に関する注意
整数int、長い整数long int共に32ビットと仮定します。
計算時間に関する注意
本センターが所有する計算機において、実行時間が5分を越えるものに関しては 途中で処理を打ち切ることがあります。
参考
#include <stdio.h> #include <math.h> int main(int argc, char *argv[]){ /** 入力 **/ int n = atoi(argv[1]); int m = atoi(argv[2]); /** fを計算 **/ /** 出力 **/ printf("%d\n", ans); もしくは printf("%s\n", ans); -- 答えが精度範囲を越えた場合