数列1,1,2,3,5,8,13,21,34..用C语言编程求第n项为?

写的这个为什么输入2却得出的结果是1?哪里错了?
算不出n项和

#include<iostream>
using namespace std;
main()
{ int s,a,b,m,n,i;
cin>>s;
a=1;
b=1;
i=1;
n=0;
if(s=1)
{cout<<"1"<<endl;
}
else
{while(i<s)
{m=a+b;
n=n+m;
a=b;
b=m;
i=i+1;
}
cout<<n<<endl;
}
}

第1个回答  推荐于2018-05-10
判断条件有问题,少写了等于,应该是:
if (s==1) {... ... ...}
else {... ... ...}追问

啊!!对!!谢谢啊。还有啊可是我输入5结果是18 正确答案应该是12 怎么回事啊。。

追答

因为求n项的和算法错了。
给你分析一下:数列为 1 1 2 3 5 8
一开始n=1+1=2
然后a和b分别往前移,变成a=1,b=2
然后问题就出现了,继续算时,n=2+1+2=(1+1)+(1+2)=5
也就是说,你这样每次前移一次就算一次n,导致,从第二个数开始,每个数都加了两遍。
程序继续运行就会变成n=(1+1)+(1+2)+(2+3)=10

追问

喔!!!我懂了!!!那应该怎么改才好呢???

追答

将n初始值设为1,也就是一个数的时候,总和为1。
(这样s==1时,也可以输出n,而不用人为输出1)
然后将n=n+m改成n=n+b
也就是说,每次只加新增的那个数
其余都不用变化

追问

真的太感谢您了!!!谢谢啊!!!好人啊!!!

本回答被提问者和网友采纳
第2个回答  2013-03-16
判断条件有问题,少写了等于,应该是:
if (s==1) {... ... ...}
else {... ... ...}
第3个回答  2013-03-16
你把if(i=1)改成if(i==1)就可以了,你一个等于号是赋值,两个等于号才是判断。
相似回答