80pts求助
查看原帖
80pts求助
132772
Hokage楼主2020/11/14 20:37
#include<iostream>
#include<cstdio>
using namespace std;

int cnt[27]={0,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262114,524288,1048576,2097152,4194304,8388608,16777216};
int a[27];
int n;
int tot;

int find(int pre,int m)
{
	if(m==0) return 1;
	if(pre==0&&m!=0) return 0;
	if(cnt[pre]<=m) 
	{
		tot++;
		a[tot]=cnt[pre];
		find(pre-1,m-cnt[pre]);
	}
	else find(pre-1,m);
}

int main()
{
	int n;
	scanf("%d",&n);
	if(n%2==1) printf("-1");
	else
	{
		if(find(24,n)) 
		{
			for(int i=1;i<=tot;i++)
			{
				printf("%d ",a[i]);
			}
		}
		else
		{
			printf("-1"); 
		}
	}
	return 0;
}
2020/11/14 20:37
加载中...