問題:
題目描述
給定一個自然數 n,由 n 開始可以依次產生半數集 set(n)中的數如下。
(1) n∈set(n);
(2) 在 n 的左邊加上一個自然數,但該自然數不能超過最近添加的數的一半;
(3) 按此規則進行處理,直到不能再添加自然數爲止。
例如,set(6)={6,16,26,126,36,136}。半數集 set(6)中有 6 個元素。 注意半數集是多重集。
輸入輸出格式
輸入格式:
每個文件只有 1 行,給出整數 n。(0<n<1000)
輸出格式:
輸出文件只有 1 行,給出半 數集 set(n)中的元素個數。
輸入輸出樣例
6
6
代碼:
#include <stdio.h>
#include <stdlib.h>
int s[500];
int ban(int n)
{
int i,sum = 1;
if(s[n] > 0)//防止重複加
s[n] = sum;
for(i=1; i<=n/2; i++)
sum += ban(i);
s[n] = sum;
return sum;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",ban(n));
return 0;
}
小結:
題目看懂了就不算難了。