優秀的拆分(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...