Cygwinでデバッグ/例題2

三角数の和への分解

三角数の説明

同じ三角数を何度も使って分解してよい。

この定理はガウスによって証明された。

作りたいプログラム

以下の指示に従って、順にプログラムを作れ。



ヒント1:「3つ以下」の部分を、「ちょうど3つ、ただし0が混じってもよい」と解釈すると、プログラムが簡単になる。「tri(0) = 0」 なので都合がよい。

例: 6 = 0 + 0 + 6
   6 = 0 + 3 + 3

ヒント2:重複する分解は、うまくループを回すことで、候補から除外できる。

例: 10 = 1 + 3 + 6 で1通りと数えるとすると、
   10 = 1 + 6 + 3 や、
   10 = 3 + 1 + 6 などは、探索しないように工夫すればよい。


num_of_sum_of_tri() 関数が、画面表示をしていると、時間がかかりすぎる。画面表示をやめれば、数秒で結果が出るようになるはずである。


コンパイル時にオプションをつけると、同じプログラムのままでも実行速度が早くなる。

gcc -O2 hoge.c

のように、"-O2"(マイナス・オー・に)を付け加えるとよい。

ここでは、プログラム上の工夫を期待している。無駄なループを回していないか、無駄な計算を繰り返していないか、あるいはアルゴリズムをがらりと変更してみるとどうなるか、などを検討して欲しい。

実行時間を測るには、

./a.exe

を実行する代わりに、

time ./a.exe

と、先頭に "time" を付けて実行すればよい。0.01 秒よりも細かい値が表示されるかもしれないが、かなりの誤差も含んでいる。信頼のおける値は 0.03 秒単位ぐらいである。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS