☆ 輸入檔案:nums.in 輸出檔案:nums.out 簡單對比
時間限制:1
s 記憶體限制:256 MB
【題目描述】
我們要求找出具有下列性質數的個數(包含輸入的自然數n):
先輸入一個自然數n(n≤1000),然後對此自然數按照如下方法進行處理
l·不作任何處理:
2·在它的左邊加上一個自然數,但該自然數不能超過原數的一半;
3·加上數後,繼續按此規則進行處理,直到不能再立生自然數為止。
【輸入格式】
自然數n
【輸出格式】
滿足條件的數的個數
【樣例輸入】
6
【樣例輸出】
6
【資料範圍及提示】
如題中所說,1<=n<=1000
【來源】
思路:
當我第一眼看到這個題的時候我就大吃一驚,因為我夏令營的時候做過原題,但仔細看看好像有些不同,這個只是讓你輸出最終結果,沒有讓你輸出每種情況。但是我犯了一個錯誤,就是按照原來做的思路列舉每種情況的方式去把這個題轉換成一個類似資料結構的題。但是這道題是有規律的,第i個數,就是前i/2個數所有情況之和,再加上本身…….
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int main() 5 { 6 freopen("nums.in","r",stdin); 7 freopen("nums.out","w",stdout); 8 int a[1001],n; 9 cin>>n; 10 a[1]=1; 11 for(int s=2;s<=n;s++) 12 { 13 a[s]=0; 14 for(int i=1;i<=s/2;i++) 15 { 16 a[s]+=a[i]; 17 } 18 a[s]++; 19 } 20 cout<<a[n]; 21 return 0; 22 }