我不明白为什么我的代码没有显示正确的输出。例如:n=5
的输入应该给出输出1 2 3 6 11
,但是它给出输出1 1 0 0 0
。您能提出一些改进建议吗?
我的代码在类似于Fibonacci系列的原理上工作。而不是添加前2个字词,而是添加前3个字词。
#include <stdio.h>
int main() {
int a=0,b=1,c=0,i,n,s; //To print s=1(first term)
scanf("%d",&n);
for(i=1;i<=n;i++){
s=a+b+c;
printf("%d ",s);//for first time it will print 1.
s=c;//for second term value of s=1 will be pasted in c.
c=b; //for second term value of c=0 will be pasted in b.
b=a; //for second term value of b=1 will be pasted in a.
} //loop will go back to first step and print s=1+0+1=2(second term)
and so on ,3,6,11....
return 0;
}
我希望n=5
的输出为
1,2,3,6,11
但实际输出是
1 1 0 0 0
答案 0 :(得分:0)
您分配的值不正确。您还分配了s = c,这是不正确的,因为将来不再使用它。
@
答案 1 :(得分:0)
您已颠倒了分配语句。 s=c;
将c
的值设为s
,但是您希望s
中的c
的值。
您可以通过反转每个分配来解决此问题,但是您将在c
存入b
之前进行更改,并在b
存入a
之前进行更改。要解决此问题,请颠倒分配顺序,因此首先分配a
:
a = b;
b = c;
c = s;
答案 2 :(得分:0)
您的作业分配有误:
s=c;//for second term value of s=1 will be pasted in c.
c=b; //for second term value of c=0 will be pasted in b.
b=a; //for second term value of b=1 will be pasted in a.
应该是
a = b; //for second term value of b=1 will be pasted in a.
b = c; //for second term value of c=0 will be pasted in b.
c = s;//for second term value of s=1 will be pasted in c.
答案 3 :(得分:-1)
0,0,1
的{{1}} a,b,c
的数组1 2 4 7 13
的值。修改后的代码如下。
a,b,c
n = 5的输出是
1 2 4 7 13
修改
要显示第n个项的值,您需要将int main()
{
int a=0,b=0,c=1,i,n,s; //To print s=1(first term)
scanf("%d",&n);
for(i=1;i<=n;i++)
{
s=a+b+c;
printf("%d ",s);//for first time it will print 1.
a=b;
b=c;
c=s;
}
return 0;
}
移动到循环的末尾。
如果printf
非常大,则可以考虑没有循环本身,导出第n个项的公式并直接使用它。