xd你这做法的思路是什么?
by Felix_Xie @ 2021-07-01 06:31:21
没看出来这个作法有什么科学依据
by Felix_Xie @ 2021-07-01 06:35:43
@[Jiayn](/user/267122) 哥你
a[i]=a[i-1]*2
a[1]=1 不香吗?非得这样浪费复杂度
by Felix_Xie @ 2021-07-01 06:46:58
@[Jiayn](/user/267122) 初值可能赋的不对,但是思路总归没错
by Felix_Xie @ 2021-07-01 06:48:10
@[Felix_Xie](/user/491380) 谢谢您的提醒,我改一下代码,再发一下qwq
by Jiayn @ 2021-07-01 06:53:21
我发一下我的AC代码,一种开数组,一种不开
by Felix_Xie @ 2021-07-01 06:56:52
@[tgyyds](/user/517126)
```cpp
#include<bits/stdc++.h>
using namespace std;
int sum=0;
int main()
{
int s,a[1025],n,i,q=0;
cin>>n;
if(n%2!=0)
cout<<"-1";
else
{
a[1] = 1;
for(i=2;i<=25;i++)
{
a[i]=a[i-1]*2;
}
for(i=25;i>=2;i--)
{
if(sum < n && a[i] <= n-sum){
cout<<a[i]<<" ";
sum+=a[i];
}
}
}
return 0;
}
```
这样就可以过了(改动有些大qwq)
by Jiayn @ 2021-07-01 06:57:25
二进制思想
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,x,s=1;
int a[32];
int main(){
scanf("%d",&n);
if(n%2){
printf("-1");
return 0;
}
while(n){
if(n%2) a[++x]=s;
n/=2,s*=2;
}
for(int i=x;i>=1;i--)
printf("%d ",a[i]);
return 0;
}
```
by Felix_Xie @ 2021-07-01 06:57:39
一种算是逐步逼近,好处是不用开数组
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,x,nt;
int main(){
scanf("%d",&n);
nt=n;
if(n%2){
printf("-1");
return 0;
}
while(nt>0){
x=1;
while(n>1) n/=2,x*=2;
printf("%d ",x);
nt-=x;
n=nt;
}
return 0;
}
```
by Felix_Xie @ 2021-07-01 06:58:47
@[Felix_Xie](/user/491380) orz orz
by _Emiria_ @ 2021-07-01 09:05:20