package com.supermars.practice;
import java.io.BufferedInputStream;
import java.util.Arrays;
import java.util.Scanner;
public class 子集生成增量构造法 {
static int A[] = new int[1 << 7];
static Scanner cin = new Scanner(new BufferedInputStream(System.in));
public static void main(String[] args) {
while (cin.hasNext()) {
int n = cin.nextInt();
/*for (int i = 0; i < n; i++) {
A[i] = cin.nextInt();
}
Arrays.sort(A, 0, n);*/
print_subset(n, A, 0);
}
}
private static void print_subset(int n, int[] A, int cur) {
// 打印当前集合
for (int i = 0; i < cur; i++) {
System.out.print(A[i] + " ");
}
System.out.println("");
// 当前集合最小可能值
int min = cur > 0 ? A[cur-1]+1:0;
// 递归构造子集
for (int i = min; i < n; i++) {
A[cur] =i;
print_subset(n, A, cur + 1);
}
}
}
-------------
package com.supermars.practice;
import java.io.BufferedInputStream;
import java.util.Scanner;
public class 子集生成位量法 {
//static int A[] = new int[1 << 7];
static int B[] = new int[1 << 7];
static Scanner cin = new Scanner(new BufferedInputStream(System.in));
public static void main(String[] args) {
while (cin.hasNext()) {
int n = cin.nextInt();
print_subset(n, B, 0);
}
}
private static void print_subset(int n, int[] B, int cur) {
if (n == cur) {
for (int i = 0; i < n; i++) {
if (B[i] == 1)
System.out.print(i + " ");
}
System.out.println("");
} else {
B[cur] = 1;
print_subset(n, B, cur + 1);
B[cur] = 0;
print_subset(n, B, cur + 1);
}
}
}
-------------------
package com.supermars.practice;
import java.io.BufferedInputStream;
import java.util.Scanner;
public class 子集生成二进制法 {
//no
static int A[] = new int[1 << 7];
static Scanner cin = new Scanner(new BufferedInputStream(System.in));
public static void main(String[] args) {
while (cin.hasNext()) {
int n = cin.nextInt();
int s = Integer.valueOf(Integer.toBinaryString(n));
for (int i = 0; i < (1 << n); i++) {
print_subset(n, i);
}
}
}
private static void print_subset(int n, int s) {
// s = Integer.valueOf(Integer.toBinaryString(s));
for (int i = 0; i <=n; i++) {
// 枚举各值
if (((s & (1 << i)))==1) {
System.out.print(i + " ");
}
}
System.out.println("");
}
}