求解C++算法题目
实数数列: 一个实数数列共有N项,已知:
Ai=(Ai-1-Ai+1)/2+d
其中,1<i<N N<60 (其中的Ai,Ai-1,Ai+1中,i是下标。 )
使用键盘输入N d A1 AN m,求出Am,并输出。程序语言使用C++
问题点数:100、回复次数:9Top
1 楼jp1984(mathfrog)回复于 2005-01-07 17:49:35 得分 0
这题要求 精确解并没有想象中的简单 ,不过可以先尝试推导通项公式 ,可用待定系数法求解,应该可以找到满足上面 递归方程 公式,然后再迭代求解 。
做起来可能有点麻烦 不过花点时间应该可以,没有什么复杂算法主要是数学推导Top
2 楼yinyyzz(深蓝)回复于 2005-01-07 18:15:10 得分 0
能给出详细程序么?Top
3 楼yinyyzz(深蓝)回复于 2005-01-07 23:39:55 得分 0
真不好意思,在公式 Ai=(Ai-1-Ai+1)/2+d中,i和i-1和i+1都是表示项数的下标。Top
4 楼yinyyzz(深蓝)回复于 2005-01-07 23:40:19 得分 0
谁能给出详细程序再加100!Top
5 楼yelling(Ray(←☆→射手))回复于 2005-01-08 00:28:19 得分 10
不懂你题目的意思,能不能举个例子Top
6 楼yinyyzz(深蓝)回复于 2005-01-08 11:42:48 得分 0
题目的意思就是给出数列的第一项和最后一项,并给出了d(d是两项之间的差)。求任意项的值Top
7 楼kongl123(kongl123)回复于 2005-01-08 16:32:16 得分 50
我不会求通项,不过因为题中的 N 有限大 可以用程序算出 :
An = c1 * A1 + c2 * A2 + cd * D.由程序gete(...)算得
由此算出 :
A2 = (An - c1 * A1 - cd * D) / c2
于是可以由程序递归地算出 Am.程序如下:
#include <iostream.h>
void gete(int n,int& c1,int& c2,int& cd){
int _c1 = 0,_c2 = 0,_cd = 0;
if(n == 3){
c1 = 1;
c2 = -2;
cd = 2;
return;
}
if(n == 2){
c1 = 0;
c2 = 1;
cd = 0;
return;
}
gete(n-2,_c1,_c2,_cd);
c1 = _c1;
c2 = _c2;
cd = _cd + 2;
gete(n-1,_c1,_c2,_cd);
c1 -= _c1 * 2;
c2 -= _c2 * 2;
cd -= _cd * 2;
}
double compute(double a1,double a2,double d,int m){
if(m == 1)
return a1;
if(m == 2)
return a2;
double result = 0;// an = 2 * d + a(n-2) - 2 * a(n-1)
result += 2 * d;
result += compute(a1,a2,d,m-2);
result -= 2 * compute(a1,a2,d,m-1);
return result;
}
void main(){
double a1 ,an ,a2, d,n;
cout << "input n , a1 , an and d:\t" ;
cin >> n >> a1 >> an >> d;
if( n > 2){
int c1,c2,cd;
gete(6,c1,c2,cd);//
// after finished the function. an = cd * d + c1 * a1 + c2 * a2. so a2 =...
a2 = (an - cd * d - c1 * a1) / c2;
}
int m;
cout << "input m:\t";
cin >> m;
if (m <= n)
cout << compute(a1,a2,d,m) <<endl;
}Top
8 楼mathe()回复于 2005-01-08 22:10:41 得分 0
这个是数学题,不需要用计算机Top
9 楼mathe()回复于 2005-01-08 22:19:08 得分 40
Let
A(k)=d+u*(-1+sqrt(2))^(k-1)+v*(-1-sqrt(2))^(k-1)
so
A1-d = u+v
AN-d = u*(-1+sqrt(2))^(N-1)+v*(-1-sqrt(2))^(N-1)
从这里可以计算出u,v
然后
Am=d+u*(-1+sqrt(2))^(m-1)+v*(-1-sqrt(2))^(m-1)Top




