1. 正整数的最优分解
描 述 : 任 意 一 个 自 然 数 都 可 以 分 解 成 若 干 个 2 的 幂 次 之 和 , 例 如 : 7=1+2+4=2 0 +2 1 +2 2 ,10=8+2=2 3 +2 1。这些分解中有唯一一个最优分解,既分解为若干 个不同的 2 的正整数次幂之和。所以,10=2 3 +2 1是一个最优分解,而 7=2 0 +2 1 +2 2不 是最优分解,因为 2 0不是 2 的正整数次幂。 输入一个正整数 n(n<220),如果存在最优分解,则按从大到小的顺序输出分解的 数字,若不存在最优分解则输出-1.
输入:输入一个正整数 n
输出:如果 n 存在最优分解,则在一行上按从大到小的顺序输出分解的数字,数 字之间用空格分隔;若不存在最优分解则输出-1.
输入样例:
样例 1: 10
样例 2: 7
输出样例:
样例 1: 8
2 样例
2:-1
刚开始看完这道题是非常蒙的,在草稿纸上算了算几个数,自己总结了一下规律,发现是偶数都有正数的最优分解,奇数都没有正数的最优分解(一定有2的零次幂)
所以接下来只需处理偶数的最优分解问题
感觉自己的思路不好用文字描述,就直接上代码吧~
#include#include int main(){ int n,i; scanf("%d",&n); double convert=n*1.0; if(n%2==1){ printf("-1"); } else{ i=0; do{ i++; //printf("i=%d,pow(2,i)=%.0fn",i,pow(2,i)); }while(pow(2,i) 欢迎各位大佬点拨点拨本菜鸡~



