ほとんどできていたが、あいかわらずインデンテーションができていない解答がいくつかあった。 indent.cとほとんど同じ構造なのにナゼだろうか?
提出してくれた人は大部分正解だったが、 せっかく全部提出したのにインデンテーションでNGになっている人もいた。
問題文の「ただし」以下を良く読んでいない解答がいくつかあった。
必要な本数 ( n×(n+1) ÷ 2 ) よりも多くの線分を出力してしまう解答が多かった。
例題の ngon.cが良くわからないという考察が多かったが、 短いプログラムで、高2程度の数学なので、やはり読んで理解できる必要があるだろう。
本質的には 0 ≤ i < j < nを満たす i, jの組をすべて出力せよ、という問題である。 例えば、n=6という入力に対して、
i=0 j=1, i=0 j=2, i=0 j=3, i=0 j=4, i=0 j=5, i=1 j=2, i=1 j=3, i=1 j=4, i=1 j=5, i=2 j=3, i=2 j=4, i=2 j=5, i=3 j=4, i=3 j=5, i=4 j=5,という出力ができれば、できたも同然である。
提出し正解(OK)の人は3人だけだった。
最高点・最低点で同点のひとがいた場合にどうするか、迷ったひとが多かったようだが、 だれか一人を出力するプログラムで良い。 (← この点は問題文で明確でなかったので、訂正する。)
配列の添字の範囲は
int tensu[NUMBER];と宣言したときは
0
から NUMBER-1
である。
この添字の範囲を超えてアクセスした場合、予想できない結果になる。
(arraymisuse.cを
bcc32でコンパイルし、実行してみよ。
他のコンパイラでは、また別の結果になるかもしれない。)
コンマ演算子を使っている解答
if (tensu[i] > max) max = tensu[i], maxno = i+1;が意外に多くあったが、この場合は素直に、ブロックを使って、
if (tensu[i] > max) { max = tensu[i]; maxno = i+1; }と書くべきであろう。