[家庭作业]
我们必须使用 Java 或 C++ 找到给定集合的幂集。该集合将以任意大小的数组的形式被接受,我需要显示该集合的幂集的元素。请注意,唯一要使用的概念是数组、循环和函数(递归和迭代)。
我需要有人指出我可以应用的逻辑的正确方向。请帮忙。
PS:集合A的幂集是集合A的所有子集的集合。A = { a, b, c} A 的幂集 = {{},{a},{b},{c},{a,b},{b,c},{a,c},{a ,公元前}}
编辑:
非常感谢“wy”和“MrSmith42”!我已经使用他们给出的逻辑编写了我的程序。现在我正在尝试优化它。请注意,我是 Java 新手,由于它的新颖性,我觉得它有点不舒服。
这是我的代码:
import java.util.Scanner;
public class PowerSet {
//Function to increment binary string...
static String incr_bin (String binary){
char bin[] = new char[100];
int size_bin, i;
size_bin = binary.length();
bin = binary.toCharArray();
bin[size_bin-1]++;
for(i=size_bin-1; i>=0; i--){
if (i != 0){
if(bin[i] > '1'){
bin[i]='0';
bin[i-1]++;
}
}
}
if (bin[0]>'1'){
for(i=0;i<size_bin;i++){
bin[i]='0';
}
}
binary = new String (bin);
return binary;
}
public static void main(String[] args) {
//Declarations
Scanner in = new Scanner (System.in);
int a[] = new int [100];
int size_a, i, count=0;
String binary;
//Input
System.out.println("Enter the number of elements in A : ");
size_a = in.nextInt();
char bin[] = new char [size_a];
System.out.println("Enter the elements in A : ");
for(i=0; i<size_a; i++){
a[i] = in.nextInt();
bin[i] = '0';
}
binary = new String(bin);
//Calculating and Setting up subsets
System.out.println("MEMBERS OF POWER SET :");
do{
System.out.print("\n{.");
count = 0;
binary = incr_bin(binary);
bin = binary.toCharArray();
for(i=0; i<size_a; i++){
if (bin[i] == '0') count++;
if (bin[i] == '1') System.out.print(a[i] + " ");
}
System.out.println("}");
}while(count!=size_a);
}
}