【遞推】P1028數的計算
阿新 • • 發佈:2020-12-03
題目相關
題目描述
我們要求找出具有下列性質數的個數(包含輸入的正整數 n)。
先輸入一個正整數 n(n ≤1000),然後對此正整數按照如下方法進行處理:
- 不作任何處理;
- 在它的左邊加上一個正整數,但該正整數不能超過原數的一半;
- 加上數後,繼續按此規則進行處理,直到不能再加正整數為止。
輸入格式
1 個正整數 n(n≤1000)
輸出格式
1 個整數,表示具有該性質數的個數。
輸入輸出樣例
輸入
6
輸出
6
說明/提示
滿足條件的數為
6,16,26,126,36,136
原題連結
分析
先閱讀完題目,可以嘗試先進行列表然後找規律。
n | fun(n) |
---|---|
1 | 1 |
2 | fun(1)+1=1+1=2 |
3 | fun(1)+1=1+1=2 |
4 | fun(1)+fun(2)+1=1+2+1=4 |
5 | fun(1)+f(2)+1=1+2+1=4 |
6 | fun(1)+fun(2)+fun(3)+1=1+2+2+1=6 |
觀察一下可以發現規律,從fun(n)的值是fun(1) ~ fun(n/2)的總和加上1。
int sum=0;
for(int i=1;i<=n/2;i++){
sum+=fun(i);
}
程式碼實現
#include <iostream> using namespace std; int main(){ int n; int fun[1005]={0}; cin>>n; for(int i=1;i<=n;i++){ // fun[i]=fun[1]+fun[2]+...+fun[i/2] + 1; for(int j=1;j<=i/2;j++){//累加fun[1]~fun[i/2] fun[i]+=fun[j]; } fun[i]++;//加上自己 1 } cout<<fun[n]; return 0; }