62,620
社区成员
发帖
与我相关
我的任务
分享
import java.util.*;
public class SAT{
int questionScale;//问题规模
ArrayList list_A = new ArrayList();//中00...0到11...1
int num_A;//中00...0到11...1的个数
public SAT(int questionScale){
this.questionScale = questionScale;
num_A = (int)Math.pow(2,questionScale);
//System.out.print(num_A);
for(int i = 0; i < num_A; i++){
A newA = new A(questionScale,i);
list_A.add(newA);
//newA.print();
}
}
public A match(ArrayList form){
A temp,temp2;
for(int i = 0; i < list_A.size(); i++){
boolean match = true;
temp = (A)list_A.get(i);
System.out.print("二进制串:");
temp.print();
int num = 1;
for(int j = 0; j < form.size(); j+=2){
temp2 = (A)form.get(j);
System.out.print("代入合取范式的第" + num++ +"个式子:");temp2.print();
if( !temp.substituting(temp2) ){
System.out.println("为假!该字符串不满足!");
match = false;
break;
}
System.out.println("为真!");
}
System.out.println();
if(match)
return (A)list_A.get(i);
}
return null;
}
public static void main(String[] args){
Scanner stdin = new Scanner(System.in);
int questionScale;
do{
System.out.println("请输入问题规模:");
questionScale = Integer.parseInt(stdin.nextLine());
//System.out.println(questionScale + "");
} while(questionScale <= 0);
SAT sat = new SAT(questionScale);
A result = sat.match(sat.list_A);
if(result != null){
//输出result
System.out.print("有这样一个解:");
result.print();
} else {
System.out.println("无解!");
}
}
}
class A{
ArrayList list_a;
int scale;
public A(int scale,int num){
this.scale = scale;
list_a = new ArrayList(scale);
for(int i = 0;i < scale;i++){
list_a.add(i,"0");
}
while(num != 0){
list_a.set(--scale, num%2 + "");
num/=2;
}
}
public boolean substituting(A element){
for(int i = 0; i < this.list_a.size(); i++){
//System.out.print(" "+this.list_a.get(i)+" "+element.list_a.get(i)+"\n");
if(this.list_a.get(i).equals(element.list_a.get(i)))//同或
return true;
}
return false;
}
public void print(){
for(int j = 0;j < list_a.size();j++){
System.out.print(list_a.get(j));
}
System.out.println();
}
}
for(int i = 0; i < num_A; i++){
A newA = new A(questionScale,i);
list_A.add(newA);
//newA.print();
}