您的位置:首页 > 其它

hdu 1250 Hat's Fibonacci

2012-07-22 09:24 316 查看



Hat'sFibonacci

TimeLimit:2000/1000MS(Java/Others)MemoryLimit:65536/32768K(Java/Others)

TotalSubmission(s):3726AcceptedSubmission(s):1252



[align=left]ProblemDescription[/align]
AFibonaccisequenceiscalculatedbyaddingtheprevioustwomembersthesequence,withthefirsttwomembersbeingboth1.

F(1)=1,F(2)=1,F(3)=1,F(4)=1,F(n>4)=F(n-1)+F(n-2)+F(n-3)+F(n-4)

Yourtaskistotakeanumberasinput,andprintthatFibonaccinumber.

[align=left]Input[/align]
Eachlinewillcontainanintegers.Processtoendoffile.

[align=left]Output[/align]
Foreachcase,outputtheresultinaline.

[align=left]SampleInput[/align]

100


[align=left]SampleOutput[/align]

4203968145672990846840663646

Note:
NogeneratedFibonaccinumberinexcessof2005digitswillbeinthetestdata,ie.F(20)=66526has5digits.


[align=left]Author[/align]
戴帽子的

[align=left]Recommend[/align]
Ignatius.L

这道题着实花了不少时间,倒不是花在解题思路上,而是花在了调试上面。总共提交了8次,算是最失败的了。
因为我是用打表,第一次,一个数组元素存一个十进制数,MLE。
换成了一个元素存5个十进制数,因为数组开大了点,又一次MLE。
而后两次runtimeerror就特别怨了,也是在这花了超多是间,因为根本就看不到还有一个d%
另外需要注意的就是存五个数时,第一个需要特别处理。切记

ViewCode

Problem:
1250(Hat'sFibonacci)JudgeStatus:RuntimeError

(ACCESS_VIOLATION)

RunId:6290695Language:C++Author:
NealGavin

CodeRenderStatus:RenderedByHDOJC++CodeRenderVersion0.01Beta

#include<cstring>
#include<cstdio>
#include<algorithm>
usingnamespacestd;
constintMAX=800;
intf[MAX][MAX];
voidgoon()
{
intd=0;//余数
for(inti=5;i<MAX;i++)
{

for(intj=1;j<=f[i-1][0];j++)
{
f[i][j]=f[i-1][j]+f[i-2][j]+f[i-3][j]+f[i-4][j]+d;
d=f[i][j]/10;
f[i][j]%=10;f[i][j]%=10;
}
f[i][0]=f[i-1][0];
while(d)
{
f[i][++f[i][0]]=d%10;
d/=10;
}
}
}
intmain()
{
//freopen("2.out","w",stdout);
memset(f,0,sizeof(f));
for(inti=1;i<5;i++)
{
f[i][0]=f[i][1]=1;
}
goon();
intm;
while(scanf("%d",&m)!=EOF)
{
for(inti=f[m][0];i>0;i--)
printf("%d",f[m][i]);
printf("\n");
//printf("A%d\n",f[m][0]);
}
}

#include<cstring>
#include<cstdio>
#include<algorithm>
usingnamespacestd;
constintMAX=800;
intf[MAX][MAX];
voidgoon()
{
intd=0;//余数
for(inti=5;i<MAX;i++)
{

for(intj=1;j<=f[i-1][0];j++)
{
f[i][j]=f[i-1][j]+f[i-2][j]+f[i-3][j]+f[i-4][j]+d;
d=f[i][j]/10;
f[i][j]%=10;就是这行在编译器里一直没发现哎痛苦——》f[i][j]%=10;
}
f[i][0]=f[i-1][0];
while(d)
{
f[i][++f[i][0]]=d%10;
d/=10;
}
}
}
intmain()
{
//freopen("2.out","w",stdout);
memset(f,0,sizeof(f));
for(inti=1;i<5;i++)
{
f[i][0]=f[i][1]=1;
}
goon();
intm;
while(scanf("%d",&m)!=EOF)
{
for(inti=f[m][0];i>0;i--)
printf("%d",f[m][i]);
printf("\n");
//printf("A%d\n",f[m][0]);
}
}


ViewCode

Problem:
1250(Hat'sFibonacci)JudgeStatus:WrongAnswer

RunId:6291203Language:C++Author:
NealGavin

CodeRenderStatus:RenderedByHDOJC++CodeRenderVersion0.01Beta

#include<cstring>
#include<cstdio>
#include<algorithm>
usingnamespacestd;
constintMAX=8001;
constintmod=100000;
intf[MAX][600];
voidgoon()
{
intd=0;//余数
for(inti=5;i<MAX;i++)
{

for(intj=1;j<=f[i-1][0];j++)
{
f[i][j]+=f[i-1][j]+f[i-2][j]+f[i-3][j]+f[i-4][j]+d;
if(f[i][j]>=mod)
{
d=f[i][j]/mod;
f[i][j]%=mod;
}
else
d=0;
}
f[i][0]=f[i-1][0];
while(d)
{
f[i][++f[i][0]]=d%mod;
d/=mod;
}
}
}
intmain()
{
//freopen("2.out","w",stdout);
memset(f,0,sizeof(f));
for(inti=1;i<5;i++)
{
f[i][0]=f[i][1]=1;
}
goon();
intm;
while(scanf("%d",&m)!=EOF)
{
for(inti=f[m][0];i>0;i--)
printf("%05d",f[m][i]);
printf("\n");
//printf("A%d\n",f[m][0]);
}
}

#include<cstring>
#include<cstdio>
#include<algorithm>
usingnamespacestd;
constintMAX=8001;
constintmod=100000;
intf[MAX][600];
voidgoon()
{
intd=0;//余数
for(inti=5;i<MAX;i++)
{

for(intj=1;j<=f[i-1][0];j++)
{
f[i][j]+=f[i-1][j]+f[i-2][j]+f[i-3][j]+f[i-4][j]+d;
if(f[i][j]>=mod)
{
d=f[i][j]/mod;
f[i][j]%=mod;
}
else
d=0;
}
f[i][0]=f[i-1][0];
while(d)
{
f[i][++f[i][0]]=d%mod;
d/=mod;
}
}
}
intmain()
{
//freopen("2.out","w",stdout);
memset(f,0,sizeof(f));
for(inti=1;i<5;i++)
{
f[i][0]=f[i][1]=1;
}
goon();
intm;
while(scanf("%d",&m)!=EOF)
{
for(inti=f[m][0];i>0;i--)就是这没处理,WA

printf("%05d",f[m][i]);
printf("\n");
//printf("A%d\n",f[m][0]);
}
}



#include<cstring>
#include<cstdio>
#include<algorithm>
usingnamespacestd;
constintMAX=8033;
constintmod=100000;
intf[MAX][800];
voidgoon()
{
intd=0;//进位
for(inti=5;i<MAX;i++)
{

for(intj=1;j<=f[i-1][0];j++)
{
f[i][j]=f[i-1][j]+f[i-2][j]+f[i-3][j]+f[i-4][j]+d;
if(f[i][j]>=mod)
{
d=f[i][j]/mod;
f[i][j]%=mod;
}
else
d=0;
}
f[i][0]=f[i-1][0];
while(d)
{
f[i][++f[i][0]]=d%mod;
d/=mod;
}
}
}
intmain()
{
//freopen("2.out","w",stdout);
memset(f,0,sizeof(f));
for(inti=1;i<5;i++)
{
f[i][0]=f[i][1]=1;
}
goon();
intm;
while(scanf("%d",&m)!=EOF)
{
printf("%d",f[m][f[m][0]]);
for(inti=f[m][0]-1;i>0;i--)
printf("%05d",f[m][i]);
printf("\n");
//printf("A%d\n",f[m][0]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: