2020CSP j2 1 優秀的拆分(power)

2021-10-10 20:12:50 字數 1340 閱讀 7573

優秀的拆分(power)2020 csp-j-01

【題目描述】

般來說,乙個正整數可以拆分成若干個正整數的和。例如,1=1,10=1+2+3+4等。對於正整數n的一種特定拆分,我們稱它為「優秀的",當且僅當在這種拆分下,n被分解為了若干個丕同的2的正整數次冪。注意,乙個數x能被表示成2的正整數次冪,當且僅當x能通過正整數個2相乘在一起得到。

例如,10=8+2=2^3+2^1是乙個優秀的拆分。但是,7=4+2+1=2+2^1+2^0就不是乙個優秀的拆分,因為1不是2的正整數次冪。現在,給定正整數n,你需要判斷這個數的所有拆分中,是否存在優秀的拆分。若存在,請你給出具體的拆分方案。

【輸入格式】

輸入檔名為 power.in.

輸入檔案只有一行,乙個正整數n,代表需要判斷的數。

【輸出格式】

輸出檔名為power.out.

如果這個數的所有拆分中,存在優秀的拆分。那麼,你需要從大到小輸出這個拆分中的每乙個數,相鄰兩個數之間用乙個空格隔開。可以證明,在規定了拆分數字的順序後,該拆分方案是唯一的。若不存在優秀的拆分,輸出"-1"(不包含雙引號)。

【樣例1輸入】

6【樣例1輸出】

4 2【樣例1解釋】

6=4+2=2^2+2^1是乙個優秀的拆分。注意,6=2+2+2不是乙個優秀的拆分,因為拆分成的3個數不滿足每個數互不相同。

【樣例2輸入】

7【樣例2輸出】

-1【樣例3】

見選手目錄下的power/power3.in與power/power3.ans

【資料範圍與提示】

對於20%的資料,n<=10.

對於另外20%的資料,保證n為奇數。

對於另外20%的資料,保證n為2的正整數次冪。

對於80%的資料,n<=1024.

對於100%的資料,1<=n<=1x10^7.

#include int n;

int a[35];

int main(int argc, char *ar**)

int i=2,tmp=2;

while(n>0)

for(i;i>=2;i--)

fclose(stdin);

fclose(stdout);

return 0;

}

CSP J 2020 T1 優秀的拆分

題目鏈結 題目要求將 n nn 拆分成若干個不同的 2 22 的冪。顯然,根據二進位制的唯一分解性,可知只有一種拆分方法 不能拆出 2 02 0 20,顯然就是要滿足 n nn 為偶數 然後這題就做完了 include include include include using namespace ...

CSP J2020普及組複賽T1 優秀的拆分

一般來說,乙個正整數可以拆分成若干個正整數的和 例如,1 1 1 11 1,10 1 2 3 4 10 1 2 3 4 10 1 2 3 4 等。對於正整數 n nn 的一種特定拆分,我們稱它為 優秀的 當且僅當在這種拆分下,nnnn nn被分解為了若干個不同的 2 22 的正整數次冪。注意,乙個數...

優秀的拆分(power)

1 include2 using namespace std 3int main 417 18return0 19 舉例說明1 14 的可以最優拆分為 8 4 2 14的二進位制1110 8 的二進位制1000 與14按位 結果為1000 8 非0 4 的二進位制0100 與14按位 結果為0100...