
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で質問しましょう!
似たような質問が見つかりました
- 数学 a1=a b1=b an+1=5an-bn cn=an+1-an (n=1、2、3…) を満たしてい 2 2022/11/05 17:48
- 数学 隣接3項間漸化式についての質問です。画像の③か④のどちらかをan+1=pan+q^nの解き方で一般項 2 2022/11/22 21:42
- 数学 上三角行列のn乗の証明 2 2023/07/23 21:45
- 計算機科学 隣接3項間漸化式についての質問です。画像の③か④のどちらかをan+1=pan+q^nの解き方で一般項 1 2022/11/24 19:52
- 英語 Ninety bone level Straumann implants will randomly 1 2022/07/18 11:14
- 英語 Knowing that an appropriate emergence profile of a 1 2022/10/16 20:10
- その他(プログラミング・Web制作) プログラミングって本来数学的な計算をする為のものではないのですか? 学校で配られたFortran90 11 2022/08/25 22:14
- 数学 次の数列{an}の一般校を求めよ 0、5、16、33、56… 解説の写真の部分がわかりません、 数列 1 2023/06/16 15:11
- 英語 英語について 名詞に数量詞がついた場合も 目的語になりうるのでしょうか? I saw some st 2 2023/02/18 23:06
- その他(プログラミング・Web制作) Pythonでこのプログラミングを作りたいのですが 1 2022/10/24 18:56
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Visual C++ フレームを中央に表...
-
C++ bmp 透過処理
-
C言語プログラミング 漸化式に...
-
ヒストグラム均等化処理プログラム
-
C言語の関数について。
-
16bitで乱数を生成する方法
-
nCrの計算
-
並列処理プログラム
-
カレンダークラス
-
シェアウェアの作り方
-
C言語でDOS画面のプログラム(...
-
returnの使い方
-
DXライブラリによるパズルゲー...
-
偶数パリティ
-
whileとifを使い偶数を出すには
-
Pythonで入力した値以外の最大...
-
C言語で簡単なパックマンゲーム...
-
direct3dで当たり判定
-
再起呼び出しの回数をカウント...
-
| (or) を使った関数の引数の作...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2の補数を計算するプログラム
-
intとlongは同じ?
-
条件が多い場合
-
再起呼び出しの回数をカウント...
-
argvのNULLチェック
-
C言語でDOS画面のプログラム(...
-
カードシャッフルのブログラム...
-
c++ TCHARで文字化け
-
複数の共有メモリの作成
-
C++ Debug Errorについて教えて
-
C++ bmp 透過処理
-
関数とビット列
-
OpenCVによる4値化について
-
コマンドプロンプトのウィンド...
-
ヌメロンのプログラム
-
for 分についてです
-
DXライブラリとC言語 fwrite関...
-
16bitで乱数を生成する方法
-
プログラミングに関して
-
C++で表を作成したいのです ...
おすすめ情報