这道题呢,在考场的时候完全想错了,认为2的几次幂得是连续的那种,中间不能空挡。
并且比较坑人的地方在于,NOIP考场上提供的数据也是这样的,成功的误导了我
导致仅仅得到了奇数特判的20分和样例的那15分
闲话少说吧,直接把代码呈上,解析什么的在代码的注释上面
#include<bits/stdc++.h>
using namespace std;
int n;
long long f[30];//存储2的幂
int main()
{
cin>>n;
if(n%2==1) cout<<-1;//特判奇数,现在你已经能得到20分了
else
{
f[0]=1;
for(int i=1;i<=29;i++)
{
f[i]=2*f[i-1];
}//求2幂
for(int i=29;i>=1;i--)
{
if(n>=f[i])
{
n-=f[i];
cout<<f[i]<<" ";
}
}
}
}