1,1,2,3,5,8,13,21・・・と増えていく数列の500以下の範囲の合計を出すプログラムのソースが読めなくて困っています。(1)(2)(3)(4)の部分の意味がわかりません。ご教示頂けましたら助かります。
宜しくお願い致します。
#include <stdio.h>
int main() {
int a[1000] = {0,1}; //(1) なぜ、0,1??
int tmp,tmp1, ans;
for (tmp = 1;a[tmp] <= 500;tmp++) //(2)
a[tmp + 1] = a[tmp] + a[tmp -1]; //(3)
//tmp,tmp1がどういう役割をしているのか、わかりません。
for (ans = 0,tmp1 = 1;tmp1<tmp; tmp1++) { //(4)
ans = ans + a[tmp1];
printf("%d \n",a[tmp1]);
}
printf("%d",ans);
return 0;
}
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
> 1,1,2,3,5,8,13,21,...
がフィボナッチ数列である事が分かっていれば、そんなに難しくないと思います。
フィボナッチ数列の漸化式は、
a(0) = 0, a(1) = 1
a(n+1) = a(n-1) + a(n)
ですので、上式が(1)、下式が(3)を記述してます。
漸化式の添字をループ変数として記述してるが、tmp1とtmpです。
(2)は、問題の制約条件から、500までと書かれているのがコード化されてます。
(2)(3)で、数列を予め求めておいて、(4)でそれを合計して、問題を解決してます。この時、変数temp1を使い回して、合計を求めるための配列アクセス用インデックス変数としてます。分かりにくかったら、別変数tmp2を使って記述してもよいと思います。
No.1
- 回答日時:
> 1,1,2,3,5,8,13,21・・・と増えていく数列
フィボナッチ数列ですね。
(というか、何でフィボナッチ数列という言葉を使わないんだろう?)
> int a[1000] = {0,1}; //(1) なぜ、0,1??
フィボナッチ数列の定義、F(n+2)=F(n+1)+F(n)に従って計算するのに
最初の2項が必要だからでしょうね。
でも0,1じゃなくて、1,1で良い気がするけど。最初の0はどうせ使わないし。
tmpとtemp1はforループのカウンタです。
tmpは(2)のforループを抜けたとき、500を超える最初の項の配列番号になっていることが分かれば、
(4)でtmpを使っている理由も分かります。
(3)はフィボナッチ数列の定義そのままの計算です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- 企画・マーケティング 【英語・TMP資料】企業マーケティングのTMP資料のTMPってどういう 1 2022/09/23 12:13
- Visual Basic(VBA) VBA GetAttrについて教えてください 2 2022/12/22 15:25
- UNIX・Linux LINUXでのパーティション追加について 1 2022/12/09 11:15
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- UNIX・Linux デフォルト値のパラメータ展開 1 2022/08/12 17:34
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
c言語の自分で数字を入力してサ...
-
C言語において、 配列要素をひ...
-
エラーが出てしまいます
-
int i, int i[1];
-
c言語 構造体
-
C言語 構造体でつまずいています
-
ポインタを使って構造体の配列...
-
define で 配列
-
2つの要素をペアで管理する方法
-
配列の配列をmemcpyやmemcmpし...
-
C言語から質問です。
-
c言語プログラミング 等差数列...
-
C#で配列が空かを判定するには?
-
MFC - ダイアログボックスのPic...
-
C言語の2次元配列 容量が大き...
-
配列の不正アクセスについて
-
c言語
-
構造体のextern方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報