为什么不输出(蒟蒻疑问)

P7071 [CSP-J2020] 优秀的拆分

先要看懂(奇特思维)
by landernal @ 2021-10-10 19:09:13


第一层while循环条件a>0
by rsrsr @ 2021-10-10 19:12:24


所以您这里面 a 怎么小于 0 qwq
by Rosaya @ 2021-10-10 19:13:11


``` #include <iostream> #include <cmath> #include <algorithm> using namespace std; int main(){ int n; cin >> n; if(n % 2 == 1) { cout << -1; return 0; } int a = n; int d = 0, anslen = 0; int ans[100001] = {}; while(a >= 0) {//这里改成a>0,因为a最后不管是1/2还是0/2,都是0,会死循环 while(a % 2 != 1) { d++; a /= 2; } ans[anslen] = pow(2, d); a--;//这里也是a/2啊,你自己模拟一下 anslen++; //这里同样要d++ } sort(ans, ans + anslen); for(int i = anslen - 1; i >= 0; i--) { cout << ans[i] << " "; } return 0; } ``` AC代码: ``` #include <iostream> #include <cmath> #include <algorithm> using namespace std; int main(){ int n; cin >> n; if(n % 2 == 1) { cout << -1; return 0; } int a = n; int d = 0, anslen = 0; int ans[100001] = {}; while(a > 0) { while(a % 2 != 1) { d++; a /= 2; } ans[anslen] = pow(2, d); a/=2; d++; anslen++; } sort(ans, ans + anslen); for(int i = anslen - 1; i >= 0; i--) { cout << ans[i] << " "; } return 0; } ```
by ChickenDrinkingMilk @ 2021-10-10 19:18:07


@[刘煜周](/user/494192) 谢谢
by landernal @ 2021-10-10 19:20:13


@[Richard0213](/user/521302) 不谢
by ChickenDrinkingMilk @ 2021-10-10 19:21:01


|