C语言。。电脑运行结果正确。。提交OJ 出现wrong answer!

Problem Description
1202年,意大利数学家斐波那契出版了他的《算盘全书》,在书中第一次提到了著名的Fibonacci数列。
现在你的任务是求出Fibonacci数列的第n项。
Input
输入数据由多组数据组成。每组数据一行,仅一个整数,表示n的值。
Output
对于每组数据,输出仅一行,即Fibonacci数列的第n项。

自己电脑运行 结果符合数列。
但是提交到OJ。。wrong answer!!!

#include<stdio.h>
void main()
{
int a,b,i,s,n;
while(scanf("%d",&n)!=EOF)
{
if(n==2||n==1)
{
s=1;
printf("%d\n",s);
}
else
{
a=s=1;
b=1;
for(i=3;i<=n;i++)
{
a=s;
s=a+b;
b=a;
}
printf("%d\n",s);
}
}
}

你说出来的题目不是很全,我觉得这道题是一道大数相加的题目。。。
你自己好好看看题中的N的范围是多大。当N大的一定数的时候就会超出int 或者__int64的范围。。
给你一个我以前写的斐波那契大数相加。。
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1715
参考下,自己在写写。。
#include<stdio.h>
short int fb[1001][100];
short int b[1001]={1,1,1};
int i;
void add(short int x[],short int y[],short int z[])
{
int j;
for(j=1;j<=b[i-1];j++)
x[j]=0;
for(j=1;j<=b[i-1];j++)
x[j]+=y[j];
for(j=1;j<=b[i-2];j++)
x[j]+=z[j];
for(j=1;j<b[i-1];j++)
if(x[j]>=10000)
{
x[j+1]+=(x[j]/10000);
x[j]%=10000;
}
b[i]=b[i-1];
if(x[j]>=10000)
{
b[i]++;
x[j+1]=x[j]/10000;
x[j]%=10000;
}
}
int main()
{
int t,n,j;
fb[1][1]=1;fb[2][1]=1;
for(i=3;i<=1000;i++)
add(fb[i],fb[i-1],fb[i-2]);
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
printf("%hd",fb[n][b[n]]);
for(j=b[n]-1;j>0;j--)
printf("%04hd",fb[n][j]);
printf("\n");
}

return 0;
}
再给你写一个不是大数的fib。。
#include<stdio.h>
#define MAX 40 //改下范围就行了。
int main()
{
int i,j,n;
int f[MAX+1]={1,1,1}; // 也可能是__int64
for(i=3;i<=MAX;i++)
f[i]=f[i-1]+f[i-2];
while(scanf("%d",&n)!=EOF)
printf("%d\n",f[n]); //__int64 这里要改。。
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-01-28
这个算法的时间复杂度比较高啊,OJ上面有提示用F(n) = F(n/2)……,自己计算一下,用那个迭代关系做。
这个迭代的有点错误,应该改成这样
a=s=1;
b=1;
for(i=3;i<=n;i++)
{
b = a; //这个应该在最前面
a =s;
s+=b;
}
第2个回答  2011-01-28
友情帮顶了,你去找个费波拉契的函数看看,有写好的。

自己电脑运行程序没有问题,但oj上却wronganswer的常见原
其次,编译器差异也会影响程序的正确性。不同的编译器在语法解析、优化处理等方面可能存在差异,这些差异可能导致程序在本地环境正确运行,但在OJ上出现异常。系统差异是另一个重要因素。不同计算机的系统配置、库版本等差异可能影响程序的执行。正式比赛通常会使用标准化的环境,但在训练时,由于环境不统一...

C语言。。电脑运行结果正确。。提交OJ 出现wrong answer!
你说出来的题目不是很全,我觉得这道题是一道大数相加的题目。。。你自己好好看看题中的N的范围是多大。当N大的一定数的时候就会超出int 或者__int64的范围。。给你一个我以前写的斐波那契大数相加。。题目:http:\/\/acm.hdu.edu.cn\/showproblem.php?pid=1715 参考下,自己在写写。。include<stdio...

C语言 问题 为什么运行正确 OJ提交错误呢 ,谢谢!
输出格式不对吧,他的输入是连续的,你输出是在一次样例输入后就输出了,不满足输出条件。--- 输出包括t行,每行对应例子的结果。如果有六之星输出”yes”,否则输出“no”.(每一行或者每一列,每一斜线有连续的六个星为yes)--- 似乎要先根据输入的t的数量先缓存每个样例的结果,然后执行完所有例...

为什么编译器上运行正确但oj显示wrong answer?
(c语言程序,最好把变量声明放到所有语句之前,例如 sum 和 i, 先声明,后使用)。

杭电OJ题目2034,我的答案正确却总是wrong answer
对于acm的题目,我觉得如果在自己的电脑上运行对了,提交错误,怎么找出来错误,第一,反复读题目,看自己的程序中都满足题目中的要求没有,有时候输出的形式也要注意一下,有可能是要你把所有需要输入的数据都输进去,然后在吧所有输入的处理后再输出,有可能也是输入一个就处理一个,这样的情况也有的...

北大oj1008 题,c语言,总是wrong answer
include<stdio.h>#include<stdlib.h>#include<string.h>int main() {int n, i, j, a, num, m, day;char t[7];char Haab[19][7] = { "pop", "no", "zip", "zotz", "tzec", "xul", "yoxkin", "mol", "chen", "yax", "zac", "ceh", "mac", "kankin", "muan...

C语言,本地运行正常,但是OJ 上传后,为什么会出现Runtime Error_百度知 ...
运行错误大半是数组不够大,题目中N是记录条数,且N<=100000,你数组够100000吗?

...程序运行正确 但是oj上总是wrong answer、、、
void add(char *a,char *b,char *c) \/\/ab为两个加数,c为结果 { int a1[1000]={0},b1[1000]={0},c1[1000]={0}; \/\/三个int型的都赋值为零 char a2[1000],b2[1000],c2[1000];int l1,l2,l3,i,j;strcmp(a2,a);strcmp(b2,b);strrev(a2);strrev(b2); \/\/反序,...

北大OJ的1091题,C语言说我Time Limit Exceeded,程序如下,求大神指教啊...
while是不必要加的,题目的意思是它不会给你输入n>15和m>10000000的 我把你的while删掉,提交上去,结果是wrong answer.稍等,我想想怎么解

大一C语言问题,怎样输入多行测试数据再输出多行结果???
我想问一下 你这是OJ里的题吗?如果是OJ 上的题,那我可以明确的告诉你,不用理会例子那种多行输入多行输出的形式。如果你那样做了,那反而会 wrong answer。就正常的输入一个数字,输出一个结果就好。

相似回答