
c言語プログラミングについて
for文をつかって漸化式
数列anがある。
an+2=3an+1 +2a
a0=1
a1=2
のときa10の値を求めるプログラミング
もうひとつは
3つのa b c
に値を入力させてaからbの間にcの約数はいくつあるか??を求めるプログラム
これもscanfで入力させるまではわかりますが
それからよくわかりません。
これらのプログラミングにはいずれもfor文を用いると思いますがどうしてもわかりません。
ヒント
もしくは
解説よろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
あ、すみません、#1のコード書き写す際に写し間違えてたですね。
漸化式の
int a(n) { ....
って書いたトコは
int a(int n) { ....
の記述ミスです。
No.2
- 回答日時:
漸化式 のヒントです
>an+2=3an+1 +2a
an+2=3an+1 +2an の誤記ですよね。
「2つ前のanから今のanが求まる」ということですよね。
つまり、2つ前のanを、変数A,Bに記憶しておけばよいので、
int A,B,C;
として、今のanをCとして、C = 3*B + A; とでもすればよいでしょう。
具体的には、
A=a0
B=a1
とすればCとして、a2が計算できますよね。
a3を計算したいならば、
A=a1
B=a2
とすれば計算できますよね。
なんと「a1,a2はすでに計算されていて変数B,Cに入っている」ではないですか!
これを利用すればa3が計算できます。
a4 についても同じことができます。
>これらのプログラミングにはいずれもfor文を用いると思いますが
その通りです。繰り返し同じことをするのはfor文を用いてできます。
ヒントを頼りにプログラムしてください。
わからなければ、再度質問されたらよいと思います。
No.1
- 回答日時:
まずは
> 3つのa b cに値を入力させてaからbの間にcの約数はいくつあるか??を求めるプログラム
から、です。
考え方としては、始点がa、終点がbとして、
for (i = a, i <= b, i++) {
///ここに何かが入る
}
ってのがフォーマットになりますね。要するにaからbまで「繰り返し」をすれば良い。
では、約数の判定がどうなるか、って事ですが、約数とは
> 整数(整式)Aが他の整数(整式)Bで割り切れる時の、Aに対するBのこと。
との事です。言い換えると、AをBで割った時の余りがゼロになれば良い。
そうすると、条件文を使ってモジュロ(剰余)演算を行って、その解がゼロになった時にカウントしていけば良い、って事です。
従って、
int foo(int a, int b, int c) {
int count = 0;
int i = 0;
for (i = a; i <= b; i++){
if (i%c == 0){
count += 1;
}
}
return count;
}
ってのが答えになります。
main関数からどうやってこいつを呼び出すか、ってのは任せましょう。
では、次は....ですが、
>漸化式
>
>数列a_{n}がある。
>a_{n+2}=3a_{n+1} +2a_{n}
>
>a_{0}=1
>a_{1}=2
>のときa_{10}の値を求めるプログラミング
でしょうねぇ。なかなかWebページで「添字」を表現するのは厄介です。
それと、加えると、
> これらのプログラミングにはいずれもfor文を用いると思いますがどうしてもわかりません。
結論から言うと「ここでは使いません」。
漸化式をプログラミングする際にはfor文なんか使うとややこしくなってシャレにならなくなります。
じゃあどうするか?
漸化式をプログラムする際には漸化式をそのまま使えば良いのです。
こういうのを「再帰(recursive)」プログラミングと言います。
英語では漸化式をRecurrence relationと呼ぶようですが、最初の単語は再帰(recursive)と同じですね。つまり漸化式、ってのは「再帰関係式」と呼んでも良いわけですが、「数学的表現をそのままプログラムしてしまう」のが吉だ、と言う等価性を示しているわけです。下手にfor文なんて使えば関係性を壊してしまいます。
重要なのは終了条件(Baseケースと言いますが)ですが、これも考える必要がなく、問題文に書いてますね。
n = 0の時 => 1を返す
n = 1の時 => 2を返す
つまり、条件文を用いて
if (n == 0) {
return 1;
} else (n == 1) {
return 2;
} else {
// ここに何か入る
}
ってのが骨格になります。
「何が入るのか」ってのもぶっちゃけ問題文に書いてるんで、そのまま書けば良いのですが、注意点としては、問題文ではa_{n + 2}がどう定義されてるのか、って表現されてますが、これをa_{n}をどう表現されてるのか、に変えないといけません。
まあ、簡単ですよね。添字を2づつズラセば良いだけですんで。
従ってプログラムされる漸化式は次の通りです。
a_{n}=3a_{n-1} +2a_{n-2}
これを「何のヒネりもなく」そのままプログラムすると次のようになります。
int a(n) {
if (n == 0) {
return 1;
} else if (n == 1) {
return 2;
} else {
return 3 * a(n-1) + 2 * a(n-2);
}
}
これで終了、です。aを「aを使って」定義してますが、数学が「これは動く」と保証してくれてるんで、あとは知ったこっちゃないですね。
あとは、main関数を自分で作って、関数aを引数10を与えて呼び出せば題意は満たせるでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語でDOS画面のプログラム(...
-
異なるn個の整数からr個の整数...
-
放射状ブラー C言語で書いたの...
-
CppUnitはCプログラムにも使え...
-
argvのNULLチェック
-
C++で表を作成したいのです ...
-
C言語で%を使わない余りの出し方
-
条件が多い場合
-
最早開始時間と最遅完了時刻を...
-
信頼区間の1.96や1.65ってどこ...
-
Aの値からBの値を除するとは??
-
strncpyと_tcsncpy_sのヌルの扱...
-
プログラムでの数字につく”f”の...
-
gcc: incompatible pointer type
-
CStringのFindで文字列検索を行...
-
#define _CRT_SECURE_NO_WARNIN...
-
Enterキーを押されたら次の処理...
-
「Aに対するBの割合」と「Aに対...
-
正の数aは4の倍数で、7でわると...
-
有効数字について 以前質問をし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語で簡単なパックマンゲーム...
-
2の補数を計算するプログラム
-
c言語プログラミングについて f...
-
再起呼び出しの回数をカウント...
-
intとlongは同じ?
-
openCVの画像処理について
-
C言語
-
【C#】SQL文の中に変数を埋め込...
-
C言語プログラミング 漸化式に...
-
カードシャッフルのブログラム...
-
C++ Debug Errorについて教えて
-
デバッグビルドとリリースビル...
-
迷路を脱出する経路探索プログ...
-
C++デバックエラーについて詳し...
-
C++ bmp 透過処理
-
複数の共有メモリの作成
-
C言語で%を使わない余りの出し方
-
C言語
-
2次関数プログラムを描写する...
-
16bitで乱数を生成する方法
おすすめ情報