C 语言问题 在C语言中如何实现

来源:百度知道 编辑:UC知道 时间:2024/05/09 03:18:31
某级数的前两项A1=1;A2=1;。以后各项具有如下关系:
An=An-1+2An-1(n-2;n-1为下标)
要求:
对整数M=100,1000,10000求出对应的n值。使其满足:Sn<M且Sn+1>=M,这里Sn=A1+A2+...+An,并依次把n值村如数组单元b[0].b[1] b[2]中

#include <stdio.h>
int b[3];

jsValue()
{int a1=1,a2=1,a12,sn,k=2;
sn=a1+a2;
while(1)
{a12=a1+2*a2;
if(sn<100&&sn+a12>=100) b[0]=k;
if(sn<1000&&sn+a12>=1000) b[1]=k;
if(sn<10000&&sn+a12>=10000) {b[2]=k;break;}
sn=sn+a12;
a1=a2;a2=a12;
k++;
}
}

main()
{
jsValue();
printf("M=100,n=%d\nM=1000,n=%d\nM=10000,n=%d\n",b[0],b[1],b[2]);
writeDat();
}

writeDat()
{
FILE *fp;

fp=fopen("out.dat","w");
printf("%d\n%d\n%d\n",b[0],b[1],b[2]);
fprintf(fp,"%d\n%d\n%d\n",b[0],b[1],b[2]);
fclose(fp);
}

在jsval

第一次循环:
a12=a1+2*a2; /*a1=1(An-2), a2=1(An-1), a12=3(其实这个地方应该叫a3好因为他就是下一个数,就是你的An) */
sn=sn+a12; /*sn当然是和了*/
a1=a2;a2=a12; /*然后我们要用的就是第二个和第三个数了 a1=1,a2=3*/
哈哈
然后周而复始
直到看见最后一个If 里面break就跳出去了。

就是这两句啊
a12=a1+2*a2; //a12就是a3
a1=a2;a2=a12; //其实就是 a1=a2 a2=a3
以此类推