大学第二学期离散数学实验一

A - 1.1联结词真值运算
描述
已知命题变元p和q的真值,求它们的合取式(p∧q)、析取式(p∨q)、蕴涵式(p→q)、等值式(A<=>B)、与非式(p↑q)、或非式(p↓q)的真值。

输入
多组输入,每组测试数据输入两个0或1的整数p和q,1表示真值为真,0表示真值为假

输出
每组测试数据单独占一行,以空格隔开的6个0或1的整数,分别为p和q的合取式(p∧q)、析取式(p∨q)、蕴涵式(p→q)、等值式(A<=>B)、与非式(p↑q)、或非式(p↓q)的真值。

样本
输入
0 0
输出
0 0 1 1 1 1

 

#include<stdio.h>

int main()

{

int p,q;

for(;scanf("%d%d",&p,&q)!=EOF;)

{

printf("%d %d %d %d %d %d\n",(p&&q),(p||q),(!p||q),(p==q),!(p&&q),!(p||q));

}

return 0;

}

 

 

 

B - 1.3按位AND和按位OR

描述

已知长度为n的两个位串a和b,求它们的按位AND和按位OR。

输入

多组测试数据,每组测试数据第1行输入位串长度n(0 < n <= 64),第2行输入n个以空格隔开的取值为0或1的整数表示位串a,第3行输入n个以空格隔开的取值为0或1的整数表示位串b。

输出

每组测试数据占两行,第一行输出n个以空格隔开的取值为0或1的整数表示a位串和b位串的按位AND,第2行输出n个以空格隔开的取值为0或1的整数表示a位串和b位串的按位OR。

样本

输入

5

1 0 0 1 0

0 0 0 1 1

输出

0 0 0 1 0

1 0 0 1 1

 

#include<stdio.h>

int main()

{

int n,a[64],b[64],i;

for(;scanf("%d",&n)!=EOF;)

{

for(i=0;i<n;i++)

{

scanf("%d",&a[i]);

}

for(i=0;i<n;i++)

{

scanf("%d",&b[i]);

}

for(i=0;i<n;i++)

{

if(i==n-1)

{

printf("%d\n",(a[i]&&b[i]));

}

else

{

printf("%d ",(a[i]&&b[i]));

}

}

for(i=0;i<n;i++)

{

if(i==n-1)

{

printf("%d\n",(a[i]||b[i]));

}

else

{

printf("%d ",(a[i]||b[i]));

}

}

}

return 0;

}

 

 

 

C - 哪款赛车最佳?

描述

四名专家对四款赛车进行评论。

专家A说:a号赛车是最好的。

专家B说:b号赛车是最好的。

专家C说:c号不是最佳赛车。

专家D说:专家B说错了。

事实上只有一款赛车最佳,且只有一名专家说对了,其他三人都说错了。请编程输出最佳车的编号,以及哪位专家所对了。

输入

多组测试数据,对于每组测试数据,第 1 行输入3个正整数,表示a、b 、c的编号,编号x范围(1 <= x <= 4),且编号互不相同。

输出

对于每组测试数据,输出正整数x和字符ch,表示最佳车的编号以及说对的专家的编号,详细格式请参考样例。

样本

输入

2 4 3

输出

3 D

 

#include<stdio.h>

int main()

{

int a,b,c,A,B,C,D,i=0;

char j;

for(;scanf("%d%d%d",&a,&b,&c)!=EOF;)

{

if(a>=1&&b>=1&&c>=1&&a<=4&&b<=4&&c<=4)
{//题目中啊a,b,c的编号范围不小于1并且不大于4

for(A=0;A<=1;A+=1)

{

for(B=0;B<=1;B+=1)

{

for(C=0;C<=1;C+=1)

{

for(D=0;D<=1;D+=1)

{//四重循环挨个表示每句话的真值,D+=1也可以改为D++。

if(A==1)

{

D=1;

}

else if(B==1)

{

C=1;

}

else if(C==1)

{//三句话各表示一个与题目条件不符的悖论

D=1-B;

}

if(A+B+C+D==1)

{//题目给出的条件,只有一句话是对的

if(A==1)

{

i=a;

j='A';

}

else if(B==1)

{

i=b;

j='B';

}

else if(C==1)

{

j='C';

}

else

{

i=c;

j='D';

}

}

}//

}

}

}

printf("%d %c\n",i,j);

}

}

return 0;

}

 

 

 

D - 谁是作案嫌疑人?
描述
刑侦大队对涉及六个嫌疑人的一桩疑案进行分析:
一、a ,b至少有一人作案;
二、a,e,f三人中至少有两人参与作案;
三、 a ,d不可能是同案犯;
四、b,c或同时作案,或与本案无关;
五 c,d中有且只有一人作案;
六 如果d没有参与作案则e也不可能参与作案。
试编写程序,寻找作案人。

输入
多组测试数据,对于每组测试数据,第 1 行输入 6 个空格分隔的整数,代表a、b、c 、d 、e 、f的编号,编号x范围(1 <= x <= 6),且编号互不相同。

输出
对于每组测试数据,第 1 行至第 6 行分别输出对 a、b、c 、d 、e 、f的判断,详细输出格式请参考样例。

样本
输入
1 2 3 4 5 6
输出
The suspects numbered 1 are criminals.
The suspects numbered 2 are criminals.
The suspects numbered 3 are criminals.
The suspect numbered 4 is not a criminal.
The suspect numbered 5 is not a criminal.
The suspects numbered 6 are criminals.

 

#include<stdio.h>
int main()
{
int a,b,c,d,e,f,A,B,C,D,E,F,count;
for(;scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f)!=EOF;)
{
if((a>=1)&&(b>=1)&&(c>=1)&&(d>=1)&&(e>=1)&&(f>=1))
{
if((a<=6)&&(b<=6)&&(c<=6)&&(d<=6)&&(e<=6)&&(f<=6))
{
if((a!=b)&&(a!=c)&&(a!=d)&&(a!=e)&&(a!=f)&&(b!=c)&&(b!=d)&&(b!=e)&&(b!=f))
{
if((c!=d)&&(c!=e)&&(c!=f)&&(d!=e)&&(d!=f)&&(e!=f))
{//以上六个if分支结构筛选出合适的编号
for(A=0;A<=1;A+=1)
{
for(B=0;B<=1;B+=1)
{
for(C=0;C<=1;C+=1)
{
for(D=0;D<=1;D+=1)
{
for(E=0;E<=1;E+=1)
{
for(F=0;F<=1;F+=1)
{//以上六个for循环结构表示六个人犯罪的真值
if(A||B)
{
count++;
}
if((A&&E)||(A&&F)||(E&&F)||(A&&E&&F))
{
count++;
}
if(!(A&&D))
{
count++;
}
if((B&&C)||!(B||C))
{
count++;
}
if((C&&!D)||(!C&&D))
{
count++;
}
if(D||!E)
{
count++;
}//以上六个分支结构筛选出满足题目条件的真值
if(count==6)
{//6个条件都满足
if(A==1)
{//以下输出没有什么技术含量,如果用数组输入的话可以使用循环简化
printf("The suspects numbered %d are criminals.\n",a);
}
else
{
printf("The suspect numbered %d is not a criminal.\n",a);
}
if(B==1)
{
printf("The suspects numbered %d are criminals.\n",b);
}
else
{
printf("The suspect numbered %d is not a criminal.\n",b);
}
if(C==1)
{
printf("The suspects numbered %d are criminals.\n",c);
}
else
{
printf("The suspect numbered %d is not a criminal.\n",c);
}
if(D==1)
{
printf("The suspects numbered %d are criminals.\n",d);
}
else
{
printf("The suspect numbered %d is not a criminal.\n",d);
}
if(E==1)
{
printf("The suspects numbered %d are criminals.\n",e);
}
else
{
printf("The suspect numbered %d is not a criminal.\n",e);
}
if(F==1)
{
printf("The suspects numbered %d are criminals.\n",f);
}
else
{
printf("The suspect numbered %d is not a criminal.\n",f);
}
}
else
{//如果不满足所有条件则count赋值为0重新循环
count=0;
}
//
}
}
}
}
}
}
//
}
}
}
}
}
return 0;
}//120行

 

 

 

 

 

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值