解题思路:
首先所有的钱袋都可以看成一个取或不取的情况。那么这些钱袋取或不取就可以看作0或1,也就是说,要使用一些数字表示一个范围里的所有数,同时这又很二进制(取或不取)。所以我们就把钱袋里钱的数量定为2^n个。
代码:
#include<stdio.h>
int main()
{
int m,tot=0,ans[100];
scanf("%d",&m);
for(;m>>1;m>>=1)
ans[++tot]=(m>>1)+(m&1);
printf("%d\n1",tot+1);
while(tot)
printf(" %d",ans[tot--]);
return 0;
}