新的斐波那契数列
轉載請標明出處:牟尼的專欄?http://blog.csdn.net/u012027907
Problem1:?
題目描寫敘述:?
定義一個新的斐波那契數列:
?F(0)=7。?
F(1)=11;?
F(n)=F(n-1)+F(n-2);(n>=2)?
輸入:?
輸入有多組;首先輸入一個N(N<=100)。代表要輸入的測試用例的個數;接下來輸入N個數字ni(ni<=100),數字間用空格隔開。
輸出:?
求F(n)是否能被3整除,若能整除輸出‘yes’,否則輸出‘no’。
?
例子輸入:
?3?0?1?2?
例子輸出:
no?
no
yes
提示:不能用遞歸,否則超時!
在計算時。我們不是必需算出遞推的真正值,后面會越來越大,可能Int 都存不下了!
題目僅僅要求算是否是3的倍數。也就是說。無論值多大。最后都僅僅是 3n+0,3n+1,3n+2 這三種情況,我們僅僅需對3取余就可以。
/** 描寫敘述: 新的斐波那契數列* 作者: 張亞超 * 博客: 牟尼的專欄 http://blog.csdn.net/u012027907* 日期: 2014/8/24*/ #include<stdio.h> #define N 105int F[N]; // 記錄遞推數對3取余的余數 int I[N]; // 記錄輸入的n個值 bool mark[N]; //標記相應數是否是3的余數int main(){F[0] = 7;F[1] = 11;for(int i = 0; i < N; i++) //標記初始化為falsemark[i] = false;for(i = 2; i < N; i++){ //計算遞推數對3取余的余數F[i] = F[i-1] + F[i-2];if(F[i] % 3 == 0) //若為3的倍數,標記mark[i] = true; F[i] %= 3; //重要一步。簡化運算,僅僅存對3的余數}int n;while(scanf("%d",&n) != EOF){for(int i = 0; i < n; i++){ //輸入scanf("%d",&I[i]);}for( i = 0; i < n; i++){ //輸出if(mark[I[i]])printf("yes\n");elseprintf("no\n");}}return 0; } 轉載請標明出處:牟尼的專欄?http://blog.csdn.net/u012027907
總結
- 上一篇: 算法笔记_226:填符号凑算式(Java
- 下一篇: Jenkins入门系列之——03PDF文