神犇看看

P7071 [CSP-J2020] 优秀的拆分

``` #include<iostream> using namespace std; int a[100]={2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608}; int main(){ int k,t=0,n=1; cin>>k; if(k%2!=0)cout<<-1; else { for(int i=22;i>0;i--) { if(a[i - 1] > k) continue; if(k==a[i - 1]) { cout<<a[i - 1]; return 0; } else { t=a[i-1]; cout<<t<<' '; n++; if((k-a[i-1])==2) { cout<<2; return 0; } else { k-=a[i-1]; } } } } //for(int i=1;i<=10000000;i*=2)cout<<i<<endl; return 0; } ```
by sinsop90 @ 2021-01-25 07:07:14


没看懂为什么要 $while(a[i] >= k)$ 然后是 $if(k==a[i])$ 要改成 $if(k==a[i-1])$
by sinsop90 @ 2021-01-25 07:08:11


另外 $for$ 循环应该从 $i = 22$ 开始往 $i = 0$ 跑
by sinsop90 @ 2021-01-25 07:09:35


建议不要用打表
by Ryan_Yu @ 2021-01-25 09:39:56


@[sinsop90](/user/141599) 大佬,能否给详细思路 麻烦您了
by tlzhy @ 2021-01-25 23:34:16


@[sinsop90](/user/141599) 为何17 19 20 WA?
by tlzhy @ 2021-01-25 23:35:10


不至于打表吧
by 白スワンの夜 @ 2021-02-01 21:06:02


|