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行