C语言与离散数学的结合--逻辑推理

利用离散数学知识和C语言相关知识

此处有两种类型

1、 

根据下面的命题,试用逻辑推理方法确定谁是作案者,写出推理过程。

(1)营业员A或B偷了手表;

(2)若A作案,则作案不在营业时间;

(3)若B提供的证据正确,则货柜末上锁;

(4)若B提供的证据不正确,则作案发生在营业时间;

(5)货柜上了锁。

主要分为三步:

第一步:命题符号化:

A表示A偷的,B表示B偷的,C表示作案不在营业时间,D表示B提供的证据正确,E:表示货柜未上锁

第二步:

用连接词连接 A V B ∧ (┓AVC)∧(┓B V E)∧(┓B V ┓C) ∧┓E

第三步:

最后再用C语言中的连接符号接连  或 是||,且是&&或者+ 

最后编写成程序。

程序代码:

#include<stdio.h> 
int main(){
	
	int A,B,C,D,E;
	//A表示A偷的,B表示B偷的,C表示作案不在营业时间,D表示B提供的证据正确,E:表示货柜未上锁 
	for(A=0;A<2;A++)
	for(B=0;B<2;B++)
	for(C=0;C<2;C++)
	for(D=0;D<2;D++)
	for(E=0;E<2;E++)
	
	{
	
	if(5==(A||B)+(!A||C)+(!D||E)+(D||!C)+(!E))
	{

    if(A==1){
	
    printf("A");
}
      if(B==1){
	  

    printf("B");
}
      
}
}
	return 0; 
}

基础C语言解释:|| 表示逻辑或

 if 中的条件5==(A||B)+(!A||C)+(!D||E)+(D||!C)+(!E)

表示上述五个条件需要同时满足,其实这五个条件可以用连接词&&实现

即(A||B)&&(!A||C)&&(!D||E)&&(D||!C)&&(!E)

运行结果截图:

2、

5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
    A选手说:B第二,我第三。
    B选手说:我第二,E第四。
    C选手说:我第一,D第二。
    D选手说:C最后,我第三。
    E选手说:我第四,A第一。
    比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。

原理:

1表示真,0表示假;

离散数学命题符号化后即可利用C程序编写运行

每位运动员都有五种排名可能,

由已知得每位选手各答对一半,每个人说的两个条件有一个成立,两个条件相加之和为1

即可用循环+判断实现,又需要保证每位选手排名只有一种情况

程序代码:

#include<stdio.h>
int main(){
	int A,B,C,D,E;
	for(A=1;A<6;A++)
	for(B=1;B<6;B++)
	for(C=1;C<6;C++)
	for(D=1;D<6;D++)
	for(E=1;E<6;E++){
		if(((A==3)+(B==2))==1&&((B==2)+(E==4))==1&&((C==1)+(D==2))==1&&((C==5)+(D==3))==1&&((E==4)+(A==1))==1)
		//每位选手都说对了一半,1为真,0为假,两者相加为1 
		{
			
                            if ((A != B) && (A != C) && (A != D) && (A != E) &&
                                (B != C) && (B != D) && (B != E) &&
                                (C != D) && (C != E) && (D!= E))  //每个人的排名都不能相等 
                            {
						
			printf("A=%d B=%d C=%d D=%d E=%d",A,B,C,D,E);
				return 0;
		} 
	}
	
	}
	return 0;
	
}

简要说明:((A==3)+(B==2))==1  表示:

==  此符号是一个判断符号,如果符号两边的量相等,则表达式的值为1,否则为0;

A==3、B==2和(…)==1都是逻辑表达式,其值只能是1或0。当表达式为真时,值为1,否则值为0。先判断A==3是否为真,是则值为1,否则为0,再判断B==2的值。设此二式的值的和为C,则再判断C==1的值(1或0)

运行结果截图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值