如何打印最多n个术语的序列,每个术语=前三个术语的总和,第一个术语= 1,然后2 3 6 11

时间:2019-07-17 10:41:27

标签: c loops

我不明白为什么我的代码没有显示正确的输出。例如: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

4 个答案:

答案 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)

  1. 初始值应分别为0,0,1的{​​{1}}
  2. 在这种情况下,您将获得a,b,c的数组
  3. 您已按相反的顺序分配了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个项的公式并直接使用它。