编程看不懂这个程序是干什么用的 帮帮忙啊!

来源:百度知道 编辑:UC知道 时间:2024/06/17 15:27:54
某级数前两项
a1=1,a2=1,
以后关系an=an-2+2an-1
功能:
整数m=100,1000,10000,求n,使sn=m

sn=a1+a2+...+an
n依次存入b[0]b[1]b[2]
int a1,a2,an,sn,k=2;
a1=1;a2=1;
sn=a1+a2;
while(1)
{an=a1+2*a2;
if(sn<100&&(sn+1)>=100)
b[0]=k;
if(sn<1000&&(sn+1)>=1000)
b[1]=k;
if(sn<10000&&(sn+1)>=10000)
{b[2]=k;break;}
sn=sn+an;
a1=a2;
a2=an;
k++;}
希望能提供一部分注解说明

while(1)
{
an=a1+2*a2;
//连续3个if判断是因为需要计算m=100,1000,10000这3中情况时n的值,因为都
//是从a1开始加,所以求出m=10000时肯定也已经计算过m=100和1000的值,因此
//没必要设计成3次循环,每次计算1个m的值(但拆成3次会比较清晰,容易理解)
if(sn<100&&(sn+1)>=100) //已经计算出m=100时,n的值
b[0]=k; //记录下此时的n值
if(sn<1000&&(sn+1)>=1000) //已经计算出m=1000时,n的值
b[1]=k; //记录下此时的n值
if(sn<10000&&(sn+1)>=10000) //已经计算出m=10000时,n的值
{
b[2]=k; //记录下此时的n值
break; //计算结束,跳出循环
}
sn=sn+an; //这里从数学意义上理解,是计算Sn=Sn-1+an
a1=a2; //a1应该是数学意义上的an-2
a2=an; //a2应该是数学意义上的an-1
k++; //相当于下标n增大1
}

我很奇怪楼主把main给弄掉了……

你的题目好像有问题吧
an=an-2+2an-1

不就是:an=3/2
所以请重新出题目