從數列1,2,3…n中隨機找出幾個數使其和為m – JAVA編程語言程序開發技術文章

利用排列組合的知識,可以推算出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(); 
            } 
        } 
         
    } 

發佈留言