APCSの問題解いてみる(5)
からの続きです。問題はこちら
29.int p=2 でp<2000の間二倍にするのを繰り返して・・最後どうなるか。これは即解けなきゃですね。
30.コードの空欄を埋める。f(4)が 2468を返すには?
iの初期値4で これがある数字以上のときにwhileループが回る。
p = 10 - b*i とりあえず、i=4が最初に来ている 10-4*b で bが2なら
最初2,bが1なら最初6 だから b=2 より選択肢 AかC c=1確定。あとはループがどこまでかi=4 で p=2 , i=3で p=4 i=2で p=6, i=1で、p=8 ここで終えないといけないから、 a=1
31. また再帰の問題。g(4)はforループのi が1から3までで
f(1)+f(2)+f(3)とわかる。
f(3)=1+f(4)=2 , f(2)=3+f(3)=5 , f(1)=1+f(2)=6
32. またまた再帰。Mystery(9) が 34になる。
ぱっと見、選択肢(C)はあり得ない。
(A)だったらMystery(9)= 9+8+7+・・・1で 45
(B)だったらMystery(9)=9!で はるかにデカいから×
時間がなかったら、これでDを選ぶか。
(D)ならMystery(0)=0 Mystery(1)=1 フィボナッチ数列ですね。
Mystery(2)=1, Mystery(3)=2, Mystery(4)=3, Mystery(5)=5, Mystery(6)=8, Mystery(7)=13, Mystery(8)=21, Mystery(9)=34
33.関数の実行結果
a =0, 1,2,3 までだが、aやbはforループ内で変更されていないので惑わされずa==2, b==3になるケースだけ考える。
a==2 c ==2 t==3 b==3 c ==3 t ==1 でいいかな。あんまり時間かけていると混乱しそうなので、もうこれで割り切る。
34. switch文をif -else文で書き換える。一度見ておけば。
35.G(3)=K(a,3)=K(a,2)+a[3]=a[0]+a{1}+a[2]+a[3]=14
36.val = 3/2+ 4/3+ 5/3 =3
37.最初のfor文で前後入れ替えを2回やって結局元に戻っている。
2番目のfor文で、a[0],a[8], a[1],a[7]といって a[4],a[4]まで。
38.F(7)が12になった。
F(-2) F(-1) F(0) F(1) F(2) F(3) F(4) F(5) F(6) F(7)
A 1 1 1 1 1 2 2 3 4 5
B 1 1 1 1 2 2 3 4 5 7
C 1 1 1 2 2 3 4 5 7 9
D 1 1 2 2 3 4 5 7 9 12
スライドすればいいから漸化式考えるより数字あてはめた方がはやそう。
39.これもあてはめ。n=1だとAD区別できないがn=2で
A 3 B 4 C 1 D 6 と全部値が違うのでn=2を計算する。
(i, j, k)=(1, 1, 1) (1, 1, 2) (1,2,1) (1,2,2)(2,2,1)(2,2,2)で a=6よりD
40.二分法はソート済みで無いと使えない。
41.条件判定を間違える個数。A、Bはよし、C判定よりDが先に来ているのがマズイ。C判定の範囲全部Dと出るほか 60点の場合がDにならずFになってしまう。よって、判定を間違えるのは70~79点と 60点の場合。