666
2024-07-24 14:25:52
发布于:广东
0阅读
0回复
0点赞
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
int func(int s){//判断一个数里面含有最大的2的幂次方的数
int ans=0;
int t=1;
for (int i=0;t<=s;++i){
ans=t;
t*=2;
}
return ans;
}
void m(vector<int> &ans,int s,bool &flag){//递归函数
int t=func(s);
if (t==1){//有1(递归边界1)
flag=false;
return;
}
if (t==0){//完美结束(递归边界2)
return;
}
ans.push_back(t);
m(ans,s-t,flag);//递归分治减掉那部分的值
}
int main(){//主函数
bool flag=true;//能否得到正整数次幂
int a;
scanf("%d",&a);
vector<int> ans;//答案数组
m(ans,a,flag);//开始递归
if (flag){
for_each(ans.begin(),ans.end(),[](const int a){printf("%d ",a);});//遍历输出答案
}else{
printf("-1");//输出
}
return 0;
这里空空如也
有帮助,赞一个