組み合わせ

今、N個の2値変数がある。それが作る2^nの組み合わせを発生させて順次、処理するとする

	public static void hoge(int numval){
		int v=numval;
		int[] altlist = new int[v];
		int[] one = new int[v];
		for(int i=0;i<v;i++){
			altlist[i]=0;
			if(i==0){
				one[i]=1;
			}else{
				one[i]=0;
			}
		}
		
		int sum = 0;
		while(sum<v){
			//altlistにはn個の変数の値が格納されている
              //それを用いて必要な処理をする

			//altlistの更新
			sum=0;
			for(int i=0;i<v;i++){
				sum+=altlist[i];
			}
			addNshin(altlist,one,2);
			
		}
		

	}
	
	//list表示のn進数の加算
	public static void addNshin(int[] list1,int[] list2, int n){
		int kuriage = 0;
		for(int i=0;i<list1.length;i++){
			if(list1[i] + list2[i]+ kuriage <n){
				list1[i]+=list2[i] + kuriage;
				kuriage=0;
			}else{
				list1[i] = list1[i]+list2[i] + kuriage -n;
				kuriage = 1;
			}
		}
		
	}