收藏 分享(赏)

爱因斯坦推理题C++实现.doc

上传人:yjrm16270 文档编号:4522222 上传时间:2019-01-01 格式:DOC 页数:19 大小:239KB
下载 相关 举报
爱因斯坦推理题C++实现.doc_第1页
第1页 / 共19页
爱因斯坦推理题C++实现.doc_第2页
第2页 / 共19页
爱因斯坦推理题C++实现.doc_第3页
第3页 / 共19页
爱因斯坦推理题C++实现.doc_第4页
第4页 / 共19页
爱因斯坦推理题C++实现.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

1、爱因斯坦在 20 世纪初出一道逻辑推理题。他说世界上有 98的人答不出来。题目如下: 在一条街上,有 5 座房子,喷了 5 种颜色。每个房里住着不同国籍的人。每个人喝不同的饮料,抽不同品牌的香烟,养不同的宠物。 已知条件: 1、英国人住红色房子 2、瑞典人养狗 3、丹麦人喝茶 4、绿色房子在白色房子左面 5、绿色房子主人喝咖啡 6、抽 Pall Mall 香烟的人养鸟 7、黄色房子主人抽 Dunhill 香烟 8、住在中间房子的人喝牛奶 9、 挪威人住第一间房 10、抽 Blends 香烟的人住在养猫的人隔壁 11、养马的人住抽 Dunhill 香烟的人隔壁 12、抽 Blue Master

2、的人喝啤酒 13、德国人抽 Prince 香烟 14、挪威人住蓝色房子隔壁 15、抽 Blends 香烟的人有一个喝水的邻居问谁养鱼? /-首先给出程序运行结果:/-C+解析: 通过 0-4 来标记房子的位置,并规定最左边的位置的标号为 0,最右边的标号为 4。 通过 0-4 来标记国籍、房子颜色、饮料、宠物和烟的牌子。 通过排列组合的方法来选定他们的各种属性的组合。 由于需要组合的信息太大,选取先化简再进行组合的方法。 化简方法如下: 由条件 8-条件 9-条件 14-条件 4-条件 5-条件 1 可以确定的信息如下: *位 置: 0 1 2 3 4 *国 籍: 挪威人 英国人 *房子颜色:

3、 黄色 蓝色 红色 绿色 白色 *饮 料: 牛奶 咖啡 *宠 物: *烟的牌子: 通过排列组合后,同过检测其余的条件,来得到正确的结果。 由此给出 C+实现的代码: /编译环境: DEV-C+ 4.9.9.2 /共两个文件:main.cpp 和 MyDef.h/*File: MyDef.h*Author: Umbrella*Date: 2012/1/29/ 14:35*/#ifndef _MY_DEFINE_H_#define _MY_DEFINE_H_/-#define WIDTH 12/-#define YELLOW 0 /const#define BLUE 1 /const#define

4、 RED 2 /const#define GREEN 3 /const#define WHITE 4 /const/-#define DOG 0#define BIRD 1#define CAT 2#define HORSE 3#define FISH 4/-#define PALLMALL 0#define DUNHILL 1#define BLENDS 2#define BLUEMASTER 3#define PRINCE 4/-#define DANISH 0#define SWEDISH 1#define GERMAN 2#define NORWEGIAN 3 /const#defin

5、e BRITISH 4 /const/-#define TEA 0#define BEER 1#define WATER 2#define COFFEE 3 /const#define MILK 4 /const/-#endif/=文件分割线=/*File: main.cpp*Author: Umbrella*Date: 2012/1/29/ 14:47*/-/*位 置: 0 1 2 3 4 *国 籍: 挪威人 英国人 *房子颜色: 黄色 蓝色 红色 绿色 白色 *饮 料: 牛奶 咖啡 *宠 物: *烟的牌子: */-#include #include #include#include #in

6、clude “MyDef.h“/-using namespace std;/-class cManpublic:int Nationality;int Pos;int Color;int Pet;int Drink;int Smoke;/cMan(int iPos)this-Pos = iPos;this-Nationality = iPos;this-Color = iPos;this-Pet = iPos;this-Drink = iPos;this-Smoke = iPos;/-cMan *Man5; /类指针数组int Num = 0; /答案个数/*#define DANISH 0#

7、define SWEDISH 1#define GERMAN 2#define NORWEGIAN 3 /const#define BRITISH 4 /const*/string strNationality5 = “丹麦人“, “瑞典人 “, “德国人“, “挪威人“, “英国人“;/*#define YELLOW 0 /const#define BLUE 1 /const#define RED 2 /const#define GREEN 3 /const#define WHITE 4 /const*/string strColor5 = “黄色“, “蓝色“, “红色“, “绿色“, “

8、白色“;/*#define DOG 0#define BIRD 1#define CAT 2#define HORSE 3#define FISH 4*/string strPet5 = “狗“, “鸟“, “猫“, “马“, “鱼“;/*#define TEA 0#define BEER 1#define WATER 2#define COFFEE 3 /const#define MILK 4 /const*/string strDrink5 = “茶“, “啤酒“, “水“, “咖啡“, “牛奶“;/*#define PALLMALL 0#define DUNHILL 1#define B

9、LENDS 2#define BLUEMASTER 3#define PRINCE 4*/string strSmoke5 = “PallMall“, “Dunhill“, “Blends“, “BlueMaster“, “Prince“;/-void ShowTest();void Init(); /实例化 对象,并初始化已 经推断出来的信息void End(); /释放对象bool Check(); /判断是否满足剩余条件bool Check2(); /2、瑞典人养狗bool Check3(); /3、丹麦人喝茶bool Check6(); /6、抽 Pall Mall 香烟的人养鸟boo

10、l Check7(); /7、黄色房子主人抽 Dunhill 香烟bool Check10(); /10、抽 Blends香烟的人住在养猫的人隔壁bool Check11(); /11、养马的人住抽 Dunhill 香烟的人隔壁bool Check12(); /12、抽 Blue Master的人喝啤酒bool Check13(); /13、德国人抽 Prince香烟bool Check15(); /15、抽 Blends香烟的人有一个喝水的邻居void Calculate(); /进行计算void NationalityCycle();/国籍循环void DrinkCycle(); /饮料循

11、环void PetCycle(); /宠物循环void SmokeCycle(); /香烟循环void PrintInfo(); /输出结果/-int main(int argc, char *argv)ShowTest(); Init();Calculate();End();system(“PAUSE“);return 0;/-void ShowTest()coutColor = YELLOW;Man1-Color = BLUE;Man2-Color = RED;Man3-Color = GREEN;Man4-Color = WHITE;/Man0-Nationality = NORWEGI

12、AN;Man2-Nationality = BRITISH;/Man2-Drink = MILK;Man3-Drink = COFFEE;/return;/-void End()int i;for(i=0; iNationality = i;Man3-Nationality = j;Man4-Nationality = k;DrinkCycle();return;/-void DrinkCycle()int i=0,j=0,k=0;for(i=0; iDrink = i;Man1-Drink = j;Man4-Drink = k;PetCycle();return;/-void PetCycl

13、e()/对宠物进行排列 组合int i,j,k,l,m;for(i=0; iPet = i;Man1-Pet = j;Man2-Pet = k;Man3-Pet = l;Man4-Pet = m;SmokeCycle();return;/-void SmokeCycle()/对 烟 进行排列 组合int i,j,k,l,m;for(i=0; iSmoke = i;Man1-Smoke = j;Man2-Smoke = k;Man3-Smoke = l;Man4-Smoke = m;if(Check()PrintInfo();return;/-bool Check()/判断是否满 足以下条件if

14、(!Check2() /2、瑞典人养狗return false;else if(!Check3() /3、丹麦人喝茶return false;else if(!Check6() /6、抽 Pall Mall 香烟的人养鸟return false;else if(!Check7() /7、黄色房子主人抽 Dunhill 香烟return false;else if(!Check10() /10、抽 Blends香烟的人住在养猫的人隔壁return false;else if(!Check11() /11、养马的人住抽 Dunhill 香烟的人隔壁return false;else if(!Che

15、ck12() /12、抽 Blue Master的人喝啤酒return false;else if(!Check13() /13、德国人抽 Prince香烟return false;else if(!Check15() /15、抽 Blends香烟的人有一个喝水的邻居return false;elsereturn true;/-bool Check2()/2、瑞典人养狗int i;for(i=0; iNationality = SWEDISH)if(Mani-Pet = DOG)return true;elsereturn false;elsecontinue;coutNationality

16、= DANISH)if(Mani-Drink = TEA)return true;elsereturn false;elsecontinue;coutSmoke = PALLMALL)if(Mani-Pet = BIRD)return true;elsereturn false;elsecontinue;coutColor = YELLOW)if(Mani-Smoke = DUNHILL)return true;elsereturn false;elsecontinue;coutSmoke = BLENDS)if(i=0)if(Man1-Pet = CAT)return true;elsere

17、turn false;if(i=4)if(Man3-Pet = CAT)return true;elsereturn false;else if(Mani-1-Pet = CAT) | (Mani+1-Pet = CAT)return true;elsereturn false;elsecontinue;coutPet = HORSE)if(i=0)if(Man1-Smoke = DUNHILL)return true;elsereturn false;if(i=4)if(Man3-Smoke = DUNHILL)return true;elsereturn false;else if(Man

18、i-1-Smoke = DUNHILL) | (Mani+1-Smoke = DUNHILL)return true;elsereturn false;elsecontinue;coutSmoke = BLUEMASTER)if(Mani-Drink = BEER)return true;elsereturn false;elsecontinue;coutNationality = GERMAN)if(Mani-Smoke = PRINCE)return true;elsereturn false;elsecontinue;coutSmoke = BLENDS)if(i=0)if(Man1-D

19、rink = WATER)return true;elsereturn false;if(i=4)if(Man3-Drink = WATER)return true;elsereturn false;else if(Mani-1-Drink = WATER) | (Mani+1-Drink = WATER)return true;elsereturn false;elsecontinue;coutNationality);coutColor;coutDrink;coutPet;coutSmoke;coutPet = FISH)coutNationality“ 养鱼!“endl;cout“=“endl;return;/-

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > C/C++资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报