洛谷 P1829 半數集問題

問題:

題目描述

給定一個自然數 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)中的元素個數。

輸入輸出樣例

輸入樣例#1:
6
輸出樣例#1:
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;
}

小結:

題目看懂了就不算難了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章