英语:
新东方六级一单元单词刷题复习
离散:
例12 使用消解算法判断下述公式是否是可满足的:
公式 S = p∧(p∨q)∧(p∨¬q)∧(q∨¬r)∧(q∨r)
解:
S = p∧(p∨q)∧(p∨¬q)∧(q∨¬r)∧(q∨r) //化为主合取式
循环1:
S0 = Ø
S1 = {p, p∨q, p∨¬q, q∨¬r, q∨r}
S2 = Ø
Res(p∨q, p∨¬q) = p //因为循环1中S0一开始是空集,所以先在S1中消解
Res(p∨¬q, q∨¬r) = p∨¬r
Res(p∨¬q, q∨r) = p∨r
Res(q∨¬r, q∨r) = q
S2 = {p∨¬r, p∨r, q} //S2取S0和S1的差集(消解结果不在S0和S1)
循环2:
S0 = {p, p∨q, p∨¬q, q∨¬r, q∨r} //循环2中S0加入循环1中S1消解后结果
S1 = {p∨¬r, p∨r, q} //循环2中S1←循环1中S2
S2 = Ø
Res(p∨¬q, q) = p
Res(q∨¬r, p∨r) = p∨q
Res(q∨r, p∨¬r) = p∨q
Res(p∨r, p∨¬r) = p
S2 = Ø
输出“Yes”
自己概括:
循环1是S1自己消解
消解结果不在S1中就加入S2,都在就可以返回Yes
上面如果S2不是空集,就要继续循环
从第二轮循环开始,就要先在S0和S1之间消解,再S1自己消解
每次消解如果S2不是空集,下一轮循环的S0是本轮S0加上消解后的S1,下一轮的S1是本轮的S2
注:
只要有一个消解结果是“常数”就可以返回No
找可消解式以字典顺序一个一个找
Java
随机产生3个1-6的整数,如果三个数相等,那么称为“豹子”,如果三个数之和大于9,称为“大”,如果三个数之和小于等于9,称为“小”,用户从键盘输入押的是“豹子”、“大”、“小”,并判断是否猜对了
提示:随机数 Math.random()产生 [0,1)范围内的小数
如何获取[a,b]范围内的随机整数呢?(int)(Math.random() * (b - a + 1)) + a
import java.util.Scanner;
class Exercise5 {
public static void main(String agrs[]) {
Scanner input = new Scanner(System.in);
System.out.print("请押宝(豹子,大,小): ");
String guess = input.next();
System.out.println("输入是" + ":" + guess);
input.close();
int a = (int)(Math.random() * (6) + 1);
int b = (int)(Math.random() * (6) + 1);
int c = (int)(Math.random() * (6) + 1);
boolean ret = false;
switch(guess) {
case "豹子":
ret = (a == b && b == c);
break;
case "大":
ret = (a + b + c > 9);
break;
case "小":
ret = (a + b + c < 9);
break;
default :
System.out.println("输入不正确");
break;
}
System.out.println("a, b, c分别是" + a + "," + b + "," + c);
if(ret) {
System.out.println("猜对了");
}
else {
System.out.println("猜错了");
}
}
}
算法
CSDN