洛谷 2320

来源:互联网 发布:hgkp软件 编辑:程序博客网 时间:2024/06/05 00:29

解题思路:

        首先所有的钱袋都可以看成一个取或不取的情况。那么这些钱袋取或不取就可以看作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;    
}

0 0
原创粉丝点击