1. 程式人生 > >m個元素的集合取n個元素的子集

m個元素的集合取n個元素的子集

{    
    
privateint m;    
    
privateint[] set;    
    
privateboolean first;    
    
privateint position;     
    
    
public NofM(int n, int m) 
    
{        
        
this.m = m;        
        first 
=true;        
        position 
= n -1;         
        set 
=newint[n];        
        
        
for(int
 i =0; i < n; i++)             
            set[i] 
= i +1;     
    }
        
    
    
publicboolean hasNext() 
    
{        
        
return set[0< m - set.length +1;    
    }
        
    
    
publicint[] next() 
    
{        
        
if(first) 
        
{            
            first 
=false;            
            
return set;        
        }
                
        
if(set[set.length-1== m)             
            position
--;         
        
else             
            position 
= set.length -1;         
        
        set[position]
++;         // 調整右邊元素         
        
        
for(int i = position 
+1; i < set.length; i++)             
            set[i] 
= set[i-1+1;                
        
        
return set;    
    }
        
    
    
publicstaticvoid main(String[] args) 
    
{        
        NofM nOfm 
=new NofM(49);                
        
while(nOfm.hasNext()) 
        
{            
            
int[] set = nOfm.next();            
            
for(int i =0; i < set.length; i++
            
{                
                System.out.print(set[i]);               
            }
                        
            System.out.println();        
        }
    
    }

}