题解 P7071 【优秀的拆分(暂无数据)】

· · 题解

今天上午才考的。。。。。

先打表,然后再找小于n的最大的2的倍数。

如果n是奇数,直接输出-1,因为肯定有2的0次方,不满足题意,偶数一定可以被分解成不同的数

#include "cstdio"
using namespace std;
int a[35];
int main (){
    int n,ans=2,k;
    scanf ("%d",&n);
    if (n%2){printf ("-1");return 0;}
    for (int i=1;i<=30;i++){
        a[i]=ans;
        ans*=2;
    }
    while (n){
        k=1;
        while (a[k]<=n) k++;
        ans=a[k]/2;
        printf ("%d ",ans);
        n-=ans;
    }
    return 0;
}