数学II・数学B 第6問

自分がコンピュータになったつもりで黙々と処理していくと答えが出ます。

第6問 (選択問題) (配点 20)
整数15は次のように連続した二つ以上の正の整数の和として表すことができる。
15 = 1 + 2 + 3 + 4 + 5 = 4 + 5 + 6 = 7 + 8
1より大きい整数nについて、これに連続した二つ以上の正の整数の和で表すことができるかどうかを調べるプログラムを次のように作った。
110 INPUT "n=";N
120 FOR J=1 TO N-1
130    W=0
140    FOR K=J TO N
150       PRINT K;
160       W=W+K
170       IF W>N THEN PRINT "No" : GOTO 200
180       IF W=N THEN PRINT "Yes" : GOTO 200
190    NEXT K
200 NEXT J
210 END

ちょっとプログラム見ていきますか。
まず110行でNを入力してもらいます。この N が連続した二つ以上の整数の和で表すことができるかどうかを調べます。
120行からはじまるFORループで J の値を 1 から N-1 まで変化させます。このループ中で
J=1 1 + 2 + … の形で N を表すことができるか
J=2 2 + 3 + … の形で N が表すことができるか
     ・
     ・
J=N-2 N-2 + N-1 + … の形で N が表すことができるか
J=N-1 N-1 + N の形で N が表すことができるか
というのを調べます。
1 + 2 + … と足しこんでいった合計は変数 W に保存するため、130行でこの値をゼロクリアします。
140行からのFORループで K の値を J から一つずつ増加させながら W に加えます。150行のPRINT文で K の値を出力します。
W>N となれば、それ以上の足し算は無駄なので No を出力し内側のFORループを抜けます。この判定を170行のIF文で行います。
W=N となれば N が二つ以上の連続する整数で表せるということなので Yes を出力し内側のFORループを抜けます。この判定を180行のIF文で行います。
とまあ、これくらいのことがザット眺めると解ります。あとは黙々とやるだけ。

(1)このプログラムを実行し,n=?に対して10を入力すると,新たに表示される最初の2行は
[ ア ] [ イ ] [ ウ ] [ エ ] Yes
[ オ ] [ カ ] [ キ ] [ ク ] No
となる。

1行目に表示されるのは J が 1 のときに表示される値で、
1 + 2 + 3 + 4 = 10
でYesが表示されます。
同様に2行目に表示されるのは J が 2 のときに表示される値で、
2 + 3 + 4 + 5 = 14 > 10
となってNoが表示されます。
答 [ ア ] = 1、[ イ ] = 2、[ ウ ] = 3、[ エ ] = 4、
[ オ ] = 2、[ カ ] = 3、[ キ ] = 4、[ ク ] = 5

(2)n=?に対して21を入力すると,Yesが [ ケ ] 回,Noが [ コサ ] 回表示される。

コンピュータになったつもりでやってみましょう
J=1 1 + 2 + 3 + 4 + 5 + 6 = 21 Yes
J=2 2 + 3 + 4 + 5 + 6 + 7 = 27 > 21 No
J=3 3 + 4 + 5 + 6 + 7 = 25 > 21No
J=4 4 + 5 + 6 + 7 = 22 > 21No
J=5 5 + 6 + 7 + 8 = 26 > 21No
J=6 6 + 7 + 8 = 21 Yes
J=7 7 + 8 + 9 = 24 > 21 No
J=8 8 + 9 + 10 = 27 > 21 No
J=9 9 + 10 + 11 > 30 No
J=10 10 + 11 = 21 Yes
J=11〜20はやらなくてもNoになることが解ります。最初の二項の和が21を越えてしまうことが明らかだからです。
ということで。J=1〜20 の中で Yes が表示されるのは J=1、6、10 の 3 回。No が表示されるのはそれ以外の 20 - 3 = 17 回です。
答 [ ケ ] = 3、[ コサ ] = 17

2から9までの数をnとして,このプログラムを実行する。このとき,Yesが1回も表示されないnを小さい順に書くと [ シ ],[ ス ],[ セ ]である。

もうプログラムを追いかけるというよりも、数の性質を考えるだけになります。やってみましょう。
n=2 1 + 2 = 3 > 2 No
n=3 1 + 2 = 3 Yes
n=4 1 + 2 + 3 = 6 > 4、2 + 3 = 5 > 4 No
n=5 2 + 3 = 5 Yes
n=6 1 + 2 + 3 = 6 Yes
n=7 3 + 4 = 7 Yes
n=8 1 + 2 + 3 + 4 = 10 > 8、2 + 3 + 4 = 9 > 8、3 + 4 + 5 = 12 > 8 No
n=9 4 + 5 Yes
Yesが出力される数はすぐ解るので、Noの分についてだけコンピュータになったつもりでやれば良いです。Yesが一回も出力されないのは 2、4、8 です。
答 [ シ ] = 2、[ ス ] = 4、[ セ ] = 8

せぎてつ伝言板
このページの感想をどうぞ!
お名前(匿名OK):

メールアドレス:
最終更新日 : 1999年12月12日(日) segi@ra2.so-net.ne.jp
カメ飼ってます Valid CSS! midosabu@postpet.so-net.ne.jp