半數集問題

2021-10-25 12:05:21 字數 993 閱讀 1723

問題描述:給定乙個自然數n,由n開始可以依次產生半數集set(n)中的數如下:

(1) n∈set(n);

(2) 在n的左邊加上乙個自然數,但該自然數不能超過最近新增的數的一半;

(3) 按此規則進行處理,直到不能再新增自然數為止。

例如,set(6)=,半數集set(6)中有6個元素。

輸入:整數n(0舉例子弄清楚題意

「(2) 在n的左邊加上乙個自然數,但該自然數不能超過最近新增的數的一半;」

這句話的意思是直接在n的左邊寫乙個數 但是不能超過n/2;

比如:set(8)=

可以在其左邊新增的最大數為8/2=4,所以新增的最大數就是48. 當新增了48後 因為基礎數為n=8

那麼4 8 的一半分別是 2 4 ,然後加在左邊變成 248。同理 2 4 8 的一半是1 2 4,但是最近新增的數是248,因為「(3) 按此規則進行處理,直到不能再新增自然數為止」,所以2 4不滿足定義,只新增1,則最後乙個數為1248.

遞迴**(效率較低)
#include

using

namespace std;

intset

(int i)

else

return1;

}void

main()

動態規劃(效率較高)
#include

using

namespace std;

#define n 1001

int asd[n]

;void

main()

cout<<

"--"

while

(n >=0)

}

半數集和半數單集問題

問題描述 給定乙個自然數n,由n 開始可以依次產生半數集set n 中的數如下。1 n set n 2 在n 的左邊加上乙個自然數,但該自然數不能超過最近新增的數的一半 3 按此規則進行處理,直到不能再新增自然數為止。例如,set 6 半數集set 6 中有6 個元素。注意半數集是多重集。演算法設計...

半數集與半數單集問題

給定乙個自然數n,由n 開始可以依次產生半數集set n 中的數如下。1 n set n 2 在n 的左邊加上乙個自然數,但該自然數不能超過最近新增的數的一半 3 按此規則進行處理,直到不能再新增自然數為止。例如,set 6 半數集set 6 中有6 個元素。include include incl...

半數集問題

問題描述 給定乙個自然數n,由n開始可以依次產生半數集set n 中的數如下。1 n set n 2 在n的左邊加上乙個自然數,但該自然數不能超過最近新增的數的一半 3 按此規則進行處理,直到不能再新增自然數為止。例如,set 6 半數集set 6 中有6 個元素。注意半數集是多重集。程式設計任務 ...