40分求助!(为什么公布成绩时是30分,洛谷上测却是40分???)

P7071 [CSP-J2020] 优秀的拆分

```cpp #include<stdio.h> int main(void){ int n, k=0; bool y[30]; scanf("%d",&n); if(n%2==1) printf("-1"); else{ while(n!=0){ y[k++]=n%2; n/=2; } for(int i=k;i>0;i--) if(!y[k--]) printf("%d ",1<<i); } return 0; } ```
by nuo0930 @ 2020-11-19 19:06:15


$y[30]$ 数组没初始化,执行第一轮 for 循环的时候,$y[k--]$ 值不一定为零 hack: 输入:```8``` 输出:```16 8 ```
by lcyxds @ 2020-11-19 19:08:14


@[justinjia](/user/373226)
by lcyxds @ 2020-11-19 19:08:56


``` 1<<i ``` 是1左移i位,也就相当于$1 \times 2^i $
by nuo0930 @ 2020-11-19 19:09:06


@[哪吒三太子](/user/335627) 你这个输入 $2$ 输出的都是错的
by lcyxds @ 2020-11-19 19:09:33


```cpp #include<stdio.h> int main(void){ int n, k=0; bool y[30]; scanf("%d",&n); if(n%2==1) printf("-1"); n/=2; else{ while(n!=0){ y[++k]=n%2; n/=2; } for(int i=k;i>0;i--) if(!y[i]) printf("%d ",1<<i); } return 0; } ```
by nuo0930 @ 2020-11-19 19:11:12


```cpp #include<stdio.h> int main(void){ int n, k=0; bool y[30]; scanf("%d",&n); if(n%2==1) { printf("-1"); retrun 0; } n/=2; else{ while(n!=0){ y[++k]=n%2; n/=2; } for(int i=k;i>0;i--) if(!y[i]) printf("%d ",1<<i); } return 0; } ```
by nuo0930 @ 2020-11-19 19:12:01


@[哪吒三太子](/user/335627) 编译都过不去,建议先过了样例再发(
by lcyxds @ 2020-11-19 19:12:24


算了我来发吧
by lcyxds @ 2020-11-19 19:12:48


@[justinjia](/user/373226) ```cpp #include"stdio.h" #include"math.h" int main(void){ int n,y[30],k=0; scanf("%d",&n); if(n%2==1) printf("-1"); else{ while(n!=0){ y[k++]=n%2; n/=2; } k--; for(int i=pow(2,k);i>=2;i/=2) if(y[k--]) printf("%d ",i); } return 0; } ```
by lcyxds @ 2020-11-19 19:16:02


| 下一页