E(1)=E(2)=1
E(n)=(n-1)*E(n-1)+(n-2)*E(n-2) (n>2)
称为E数列,每一个E(n),(n=1,2,…)称为E数。求[1,30000]之内E数的个数
第一个#include<stdio.h>
int main()
{int a=1,b=1,n,c,i=2;
for(n=3;n<=30000;n++)
{c=(n-1)*b+(n-2)*a;
if(c<=30000)
{i++;
a=b;
b=c;
}
}
printf("%d",i);
return 0;
}
#include<stdio.h>
int main()
{int a=1,b=1,n,c,i=2;
for(n=3;n<=30000;n++)
{c=(n-1)*b+(n-2)*a;
if(c<=30000)
i++;
a=b;
b=c;
}
printf("%d",i);
return 0;
}
为什么第二种是对的,明明都没有区别新手疑惑。
上面的if(c<=30000)后面有{},下面的if后面没有{};
if后面有{}的情况,a=b;b=c;的执行受if语句的影响,只有if条件成立时才会执行
if后面没有{}的情况下,a=b;b=c;的执行不受if语句的影响,不管if条件成不成立,都会执行
你的代码有问题,代码修改如下:
代码:
#include <stdio.h>
int main()
{
int a=1,b=1,n,c,i=2;
for(n=3;n<=30000;n++) //n<=30000 没有任何用处,结束循环是用的 if else
{
c=(n-1)*b+(n-2)*a;
if(c<=30000)
{
i++;
a=b;
b=c;
}else
break;
}
printf("%d",i);
return 0;
}