题解 P7071 【优秀的拆分(暂无数据)】
Aishiteru_zwy · · 题解
今天上午才考的。。。。。
先打表,然后再找小于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;
}