- 本题解答
题目中已经提示,当n较大时,Fn也非常大
题目提供的思路是不用算出Fn,而是直接 %10007
但是,但是,但是,我提交好几次,送官网提交都会CE
CE代码如下 :
#include<stdio.h>
int main(){
int n, f1=1, f2=1, temp;
scanf("%d", &n);
if( n<3 ){
printf("1");
}
else{
for(int i=3; i<=n; i++){ //注意这个地方,往下看文章
temp = (f1 + f2) % 10007;
f1 = f2;
f2 = temp;
}
printf("%d", temp);
}
return 0;
}
我百思不得其解,在大赛要求的Dev-C++5.4测试就行,怎么到了官网却CE了呢?
最后,在我一次次的尝试下,才发现…
先上AC代码:
#include<stdio.h>
int main(){
int i, n, f1=1, f2=1, temp;
scanf("%d", &n);
if( n<3 ){
printf("1");
}
else{
for(i=3; i<=n; i++){ //对,就是这个地方
temp = (f1 + f2) % 10007;
f1 = f2;
f2 = temp;
}
printf("%d", temp);
}
return 0;
}
- 发现问题
最后我才知道,在官网中, for 循环里的 int i 是问题所在
为了验证这个问题,我尝试了下面这道题
不出所料,CE了
CE代码:
#include<stdio.h>
int main()
{
int max,a[20],b[20]={0},n,flag=0;
scanf("%d",&n);
if(n<=0)
return 0;
for(int i=0;i<n;i++) //注意
{
scanf("%d",&a[i]);
}
for(flag=0;flag<n;flag++)
{
for(int i=flag;i<n;i++) //注意
{
if(a[flag]==a[i])
{
b[flag]+=1;
}
}
}
max=b[0];
flag=0;
for(int i=0;i<n;i++) //注意
{
if(max<b[i])
{
max=b[i];
flag=i;
}
}
printf("%d",a[flag]);
return 0;
}
AC代码请看:蓝桥杯 ALGO-90 出现次数最多的整数
注意
程序提交到官网时一定注意,在main函数开头就先把变量定义了