整數分隔,整數分隔華為
| 描述: |
一個整數總可以拆分為2的冪的和,例如:
7=1+2+4
7=1+2+2+2
7=1+1+1+4
7=1+1+1+2+2
7=1+1+1+1+1+2
7=1+1+1+1+1+1+1
總共有六種不同的拆分方式。
再比如:4可以拆分成:4 = 4,4 = 1 + 1 + 1 + 1,4 = 2 + 2,4=1+1+2。
用f(n)表示n的不同拆分的種數,例如f(7)=6.
要求編寫程式,讀入n(不超過1000000),輸出f(n)%1000000000。 |
| 題目類別: |
null |
| 難度: |
初級 |
| 已耗用時間限制: |
10Sec |
| 記憶體限制: |
128MByte |
| 階段: |
入職前練習 |
| 輸入: |
每組輸入包括一個整數:N(1<=N<=1000000)。 |
| 輸出: |
對於每組資料,輸出f(n)%1000000000。
輸出有多行,每行一個結果。
輸入資料如果超出範圍,輸出-1。 |
| 範例輸入: |
7 |
| 範例輸出: |
6 |
完整代碼:
#include <iostream> using namespace std; int search[1000002]={0};int main() { unsigned int maxnum = 1000000; int input = 0, i; search[0] = 1, search[1] = 1; for(i=1; i<=500000; i++) { search[2*i] = (search[2*i - 2] + search[i])%1000000000; search[2*i + 1] = search[2*i]; } while(cin >>input) { if((input>=1)&&(input<=1000000)) { cout<<search[input]<<endl; } else { cout<<-1<<endl; } } return 0; }
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。