编程(C++)解决逻辑推理问题



编程(C++)解决逻辑推理问题

推理题:有人邀请A,B,C,D,E,F6个人参加一项会议,这6个人有些奇怪,因为他们有很多要求,已知:
1.A,B两人至少有1人参加会议。
2.A,E,F3人中有2人参加会议。
3.B和C两人一致决定,要么两人都去,要么两人都不去。
4.A,D两人中只1人参加会议。
5.C,D两人中也只要1人参加会议。
6.如果D不去,那么E也决定不去。那么最后究竟有哪几个人参加了会议呢?

……

 

推理题:有人邀请A,B,C,D,E,F6个人参加一项会议,这6个人有些奇怪,因为他们有很多要求,已知:
1.A,B两人至少有1人参加会议。
2.A,E,F3人中有2人参加会议。
3.B和C两人一致决定,要么两人都去,要么两人都不去。
4.A,D两人中只1人参加会议。
5.C,D两人中也只要1人参加会议。
6.如果D不去,那么E也决定不去。那么最后究竟有哪几个人参加了会议呢?

解法如下:

#include
#include
void change(bool a[],int size,int index);
const int size=6;
void main()
{
bool a[size];
int Right=0;
char ch=’A';
for(int i=0;i<pow(2,size);i++)
{
change(a,size,i);
if((a[0] && a[1])==false) continue;
if(a[0]+a[4]+a[5]!=2) continue;
if(a[1]+a[2]==1) continue;
if(a[0]+a[3]!=1) continue;
if(a[2]+a[3]!=1) continue;
if(a[3]==false && a[4]==true) continue;
break;
}
for(i=0;i<size;i++)
{
cout<<ch<<”:”<<a[i]<<endl;
ch+=1;
}
}

void change(bool a[],int size,int index)
{
for(int i=0;i<size;i++)
a[i]=false;
if (index>=pow(2,size)) return;
i=size-1;
while(index>0)
{
a[i]=index % 2;
index=index/2;
i–;
}
}

此算法通过穷举各种可能性来判断是否符合条件,用bool型数组来存储六个人参加会议的情况,true表示参加,false表示不参加

最后的答案是 A,B,C,F 四个人参加。


 

以下是几道推理题,有兴趣的可以试试编程解决

一 多疑的妻子

阿米莉亚、布伦达、谢里尔和丹尼斯这四位女士去 参加一次聚会。

(1)晚上8点,阿米莉亚和她的丈夫已经到达,这时 参加聚会的人数不到100人,正好分成五人一组进行交谈。
(2)到晚上9点,由于8点后只来了布伦达和她的丈夫,人们已改为四人一组在进行交谈。
(3)到晚上10点,由于9点后只来了谢里尔和她的丈夫,人们已改为三人一组在进行交谈
(4)到晚上11点,由于10点后只来了丹尼尔和她的丈夫,人们已改为二人一组在进行交谈。

(5)上述四位女士中的一位,对自己丈夫的忠诚有 所怀疑,本来打算先让她丈夫单独一人前来,而她自己 则过一个小时再到。但是她后来放弃了这个打算。

(6)如果那位对丈夫的忠诚有所怀疑的女士按本来 的打算行事,那么当她丈夫已到而自己还未到时,参加
聚会的人们就无法分成人数相等的各个小组进行交谈。

这四位女士中哪一位对自己丈夫的
忠诚有所怀疑?

二 五个人来自不同地方,住不同房子,养不同动物,吸不同牌子香烟,喝不同饮料,喜欢不同食物。根据以下线索确定谁是养猫的人?

1,红房子在蓝房子的右边,白房子的左边(不一定紧邻)
2,黄房子的主人来自香港,而且他的房子不在最左边。
3,爱吃比萨饼的人住在爱喝矿泉水的人的隔壁。
4,来自北京的人爱喝茅台,住在来自上海的人的隔壁。
5,吸希尔顿香烟的人住在养马的人?右边隔壁。
6,爱喝啤酒的人也爱吃鸡。
7,绿房子的人养狗。
8,爱吃面条的人住在养蛇的人的隔壁。
9,来自天津的人的邻居(紧邻)一个爱吃牛肉,另一个来自成都