频道栏目
首页 > 程序开发 > 软件开发 > Java > 正文
从数列1,2,3...n中随机找出几个数使其和为m
2012-09-28 14:46:10           
收藏   我要投稿
利用排列组合的知识,可以推算出n bit可以表示2^n种情况,如3bit可以表示8中情况:
000 001 010 011 100 101 110 111
现在我们规定在这n位中,如果该位上是1,那么从右往左数该位是多少位:假设为t,那么t就选中:例如:110中,代表3和2被选中,1没有被选中。
具体实现算法如下:
[java]
public static void getNM(int n,int m) 
    { 
         
         
        int num=1<<n; 
        for(int i=1;i<=num;i++) 
        { 
            int sum=0; 
            for(int j=i,k=1;j>0;j=j>>1,k++) 
            { 
                if((j&1)==1) 
                { 
                    sum+=k; 
                } 
            } 
             
            if(sum==m) 
            { 
                int val=1; 
                for(int k=i;k>0;k=k>>1,val++) 
                { 
                    if((k&1)==1) 
                    { 
                        System.out.print(val+" "); 
                    } 
                } 
                System.out.println(); 
            } 
        } 
         
    } 
点击复制链接 与好友分享!回本站首页
相关TAG标签 数列 个数
上一篇:用Java实现约瑟夫环实例
下一篇:POJ1321
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站