HDU 1715 大菲波數
阿新 • • 發佈:2017-09-09
str size clu 數值 是個 ace 技術 out memset
大菲波數
Time Limit: 1000/1000 MS (Java/Others)
Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 20423
Accepted Submission(s): 6891
Problem Description
Fibonacci數列,定義如下:
f(1)=f(2)=1
f(n)=f(n-1)+f(n-2) n>=3。
計算第n項Fibonacci數值。
Input
輸入第一行為一個整數N,接下來N行為整數Pi(1<=Pi<=1000)。
Output
輸出為N行,每行為對應的f(Pi)。
Sample Input
5 1 2 3 4 5
Simple Output
1 1 2 3 5
題解:一開始,用的int還真是interesting!!!wa了wa了,emmmm數據少的時候可以用這個吧,
給你們看一下我的錯誤的思路,受走樓梯那個動態規劃想到的。emmmm也算是個模板。
沒有AC的代碼:
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int fib(int num)
{
if(num==1||num==2 )
return 1;
int a=1;
int b=1;
int temp=0;
for(int i=3;i<=num;i++)
{
temp=a+b;
a=b;
b=temp;
}
return temp;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int pi;
scanf("%d",&pi);
printf( "%d\n",fib(pi));
}
return 0;
}
後來,emmmm因為是大數,所以肯定要開個數組,emmmm還得節約時間,
不能輸一個數就從頭算一個數,二維數組吧,加內存,減時間。
AC代碼:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int fib[1003][1003];
int main()
{
memset(fib,0,sizeof(fib));
fib[1][1]=1;
fib[2][1]=1;
for(int i=3;i<=1000;i++)
{
for(int j=1;j<=1000;j++)//這裏加法運算真是剪不斷,理還亂,這裏最重要了,錯了就全完蛋。
{
fib[i][j+1]=(fib[i][j]+fib[i-1][j]+fib[i-2][j])/10;
fib[i][j]=(fib[i][j]+fib[i-1][j]+fib[i-2][j])%10;
}
}
int t;
scanf("%d",&t);
while(t--)
{
int pi;
scanf("%d",&pi);
int node=0;
int i=1000;
while(!fib[pi][i])
{
node=i;
i--;
}
for(int i=node-1;i>=1;i--)
printf("%d",fib[pi][i]);
printf("\n");
}
return 0;
}
今天也是元氣滿滿的一天!good luck!
HDU 1715 大菲波數