我为大家弄明白这类算法一共准备了5道题:
- 条件联结词
- 双条件联结词
- 求“(P∨Q)∧(P→R)∧(Q→R)”成真赋值
- 输出“(P∨Q)∧(P→R)∧(Q→R)”真值表
- 统计“﹁(P→Q)∧(P⇄R)”取值情形
希望大家最终有哪些收获:
- 什么是条件联结词?
- 条件联结词的应用场景?
- 有没有觉得条件联结词的意义有些似曾相识?
- 如何通过现实生活更好地理解条件联结词,将数学、编程上的知识映射、关联到生活之中?
不过多废话,下面先拿最简单的一道题作为引入,帮助大家快速熟悉条件联结词的使用方式
练习1:条件联结词
题目描述
给定原子变元P、Q的真值(用1表示T,用0表示F),求命题公式P→Q的真值。
输入描述
输入原子变元P、Q的真值(1或0),用空格隔开。
输出描述
输出命题公式P→Q的真值(1或0)。
样例输入
1 1
样例输出
1
知识点
联结词
提示
对输入的P、Q,直接输出表达式“P<=Q”的值即可。
在刚开始不熟悉条件联结词的情况下,我们的切入点或是突破点是什么?
真值?假值?true(T)?false(F)?1?0?这不是布尔值吗?!
我们第一时间应该会联想到代码中常用常见的布尔值运算,以及...一些相关的逻辑运算符:或||与&&非!。那么联结词与这些逻辑运算符究竟有没有相似之处呢?我们不妨先将这个疑问摆在一旁。
这些奇怪的符号是什么?那么我们就来介绍一下:
从左到右分别为:非(否定)﹁、合取∧、析取∨、蕴含→、等价↔
从表中我们不难看出五种情况下分别什么条件才为真:
- 当p为假,非p为真
- 当且仅当p和q都为真时,p合取q为真
- 当且仅当p和q不都为假时,p析取q即为真
- 当且仅当p为真q为假时,p蕴含q为假
- 当且仅当p和q同时为真或假时,p等价于q为真
其中非的使用最好理解,蕴含相对是最难理解的一种条件联结词。
暂时先回到题目本身,所以对照表格我们可以知道P→Q什么时候为真什么时候为假的条件。
所以我们就有了转换为代码的思路:if-else的条件判断
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//在此输入您的代码...
int p = sc.nextInt();
int q = sc.nextInt();
if(p==1&&q==0){
System.out.println(0);
}else{
System.out.println(1);
}
sc.close();
}
}
代码就几行,看着就非常简单,但却包含着我们思维的一个过程:从刚开始对条件联结词的迷茫,再到知道对照着表格的判断条件来写出代码,这就是一个非常浅显而简单的学习过程。
对于这五个符号还有一些理解方式,因为它们也被称之为复合命题:
- p的否定
- p并且q
- p或者q
- 若p则q
- p当且仅当q
- 并且不就是两个条件都要满足的意思吗,即p真q真合取为真
- 或者不就是两者条件满足其一即可吗?所以p或q二者其一为真即可(不要忘了都真自然亦可)
☆若p则q...,如何更好的理解呢?
- 如果p为真,则q也必须为真;如果p为假,则q真假随意。
假设:
p命题:今天下雨;q命题:地面湿滑
如果今天下雨(p为真),则地面必然湿滑(q也必须为真);如果今天不下雨(p为假),那么地面可能湿滑,也可能不湿滑(q的真假可以随意)。
- 当且仅当表明这两个命题互为充分必要条件,极其苛刻的条件限制,可以和“若p则q”的成立条件相互对比理解。p真q真p假q假,两者“同生共死”
假设:
p命题:今天星期四;q命题:明天星期五
今天是星期四,明天必然是星期五;今天不是星期四,明天也必然不是星期五。
好的到这一步,我们应该已经对条件联结词的使用有一个初步的了解了。
下面我们安排一个实际应用场景:
已知:
- p:今天是周末
- q:我会睡懒觉
- r:我会吃大餐
问:在什么条件下这些复合命题才为真?
- p合取q
- q析取r
- p等价于(q析取r)
答:
- 今天是周末,我会睡懒觉
- 我会睡懒觉,或者我会吃大餐
- 今天是周末,睡懒觉和吃大餐两个事件必然会发生一个