从数列1,2,3...n中随机找出几个数使其和为m

2014-11-24 09:45:11 · 作者: · 浏览: 1
利用排列组合的知识,可以推算出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< 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();
}
}

}