問題描述:給定一個自然數n,由n開始可以依次產生半數集set(n)中的書如下:
(1)n∈set(n);
(2)在n的左邊加上一個自然數,但該自然數不能超過最近添加的數的一半;
(3)按照此規則直到不能再添加自然數爲止。
算法設計:對於一個給定的自然數n,計算半數集set(n)中的自然數個數。
數據輸入:輸入數據由文件名爲input.txt的文本文件提供。每個文件只有一行,給出整數n(0<n<1000)
結果輸出:將計算結果輸出到文件output.txt。輸出文件只有一行,給出半數集set(n)中的元素個數。
#include <iostream> #include <bits/stdc++.h> using namespace std; /*半數集問題*/ int func(int n){ int ans = 1; for (int i = 1; i <= n / 2; i++) { ans += func(i); } return ans; } int main(){ int n; cin>>n; cout<<func(n)<<endl; }