首页 > 其他 > 详细

求n个数中,任意m个数的组合

时间:2019-09-07 15:32:48      阅读:222      评论:0      收藏:0      [点我收藏+]
 1 import java.util.Scanner;
 2 
 3 public class 求子集的组合问题2 
 4 {
 5     static void perm(int n,int k)
 6     {
 7         //int num=0;
 8         for(int i=0;i<(1<<n);i++)
 9         {
10             int kk=i;
11             int num=0;
12             while(kk>0)//kk一直在变
13             {
14                 kk=kk&(kk-1);//表达的意义是消除掉最末尾的1后,表达的权值
15                 num++;//统计该数中1的数量
16             }
17             if(num==k)//如果该数的1的为数为num,则输出其位数上的1
18             {
19                 for(int j=0;j<n;j++)
20                     if((i&(1<<j))!=0)
21                         System.out.print(j);
22                 System.out.println();
23             }
24         }
25     }
26     public static void main(String[] args) 
27     {
28         // TODO 自动生成的方法存根
29         Scanner sc=new Scanner(System.in);
30         int n=sc.nextInt();//表示n个数
31         int k=sc.nextInt();//表示m个数
32         perm(n,k);
33     }
34 
35 }

需要注意的点是,该代码解决的是n个数中任意m个数的组合。

kk&(kk-1),其表达的意思是去掉末尾的1,如:1011 & (1011-1)= 1011&1010 =1010 

1010&(1010-1)  = 1010&1001 =1000    

求n个数中,任意m个数的组合

原文:https://www.cnblogs.com/ybc7/p/11480363.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!