爱因斯坦难题的C语言程序设计
来源:互联网 发布:河南虫虫网络 编辑:程序博客网 时间:2024/06/11 00:00
题目是:
1、 在一条街上,有5座房子,喷了5种颜色。
2、 每个房里住着不同国籍的人
3、 每个人喝不同的饮料,抽不同品牌的香烟,养不同的宠物
约束条件:
1、 英国人住红色房子
2、 瑞典人养狗
3、 丹麦人喝茶
4、 绿色房子在白色房子左面
5、 绿色房子主人喝咖啡
6、 抽Pall Mall 香烟的人养鸟
7、 黄色房子主人抽、Dunhill 香烟
8、 住在中间房子的人喝牛奶
9、 挪威人住第一间房
10、抽Blends香烟的人住在养猫的人隔壁
11、养马的人住抽Dunhill 香烟的人隔壁
12、抽Blue Master的人喝啤酒
13、德国人抽Prince香烟
14、挪威人住蓝色房子隔壁
15、抽Blends香烟的人有一个喝水的邻居
1、 在一条街上,有5座房子,喷了5种颜色。
2、 每个房里住着不同国籍的人
3、 每个人喝不同的饮料,抽不同品牌的香烟,养不同的宠物
约束条件:
1、 英国人住红色房子
2、 瑞典人养狗
3、 丹麦人喝茶
4、 绿色房子在白色房子左面
5、 绿色房子主人喝咖啡
6、 抽Pall Mall 香烟的人养鸟
7、 黄色房子主人抽、Dunhill 香烟
8、 住在中间房子的人喝牛奶
9、 挪威人住第一间房
10、抽Blends香烟的人住在养猫的人隔壁
11、养马的人住抽Dunhill 香烟的人隔壁
12、抽Blue Master的人喝啤酒
13、德国人抽Prince香烟
14、挪威人住蓝色房子隔壁
15、抽Blends香烟的人有一个喝水的邻居
问题是:谁养鱼?
#include<stdio.h>char*COL[]={NULL,"红","黄","绿","蓝","白"};char*PAD[]={NULL,"狗","猫","鱼","鸟","马"};char*DRK[]={NULL,"茶 ","牛奶","咖啡","啤酒","水 "};char*GUO[]={NULL,"挪威","英国","德国","丹麦","瑞典"};char*SMK[]={NULL,"Blends","BlueMaster","Dunhill","Pall Mall","Prince"};struct{ char guojia, color, pads, drink, smoke; } aa[5];int OK(void){ int i,j; for(i=0;i<5;i++) if(aa[i].guojia==2 && aa[i].color==1)goto next1; return 0;next1: for(i=0;i<5;i++) if(aa[i].guojia==5 && aa[i].pads==1)goto next2; return 0;next2: for(i=0;i<5;i++) if(aa[i].guojia==4 && aa[i].drink==1)goto next3; return 0;next3: for(i=0;i<5;i++) if(aa[i].color==3)goto next3_1; return 0;next3_1: for(j=i+1;j<5;j++) if(aa[j].color==5)goto next4; return 0;next4: for(i=0;i<5;i++) if(aa[i].color==3 && aa[i].drink==3)goto next5; return 0;next5: for(i=0;i<5;i++) if(aa[i].smoke==4 && aa[i].pads==4)goto next6; return 0;next6: for(i=0;i<5;i++) if(aa[i].color==2 && aa[i].smoke==3)goto next7; return 0;next7: for(i=0;i<5;i++) if(aa[i].guojia==3 && aa[i].smoke==5)goto next10; return 0;next10: for(i=0;i<5;i++) if(aa[i].smoke==2 && aa[i].drink==4)goto next11; return 0;next11: for(i=0;i<5;i++) if(aa[i].smoke==3)goto next12_1;next12_1: if(i==0){if(aa[1].pads==5)goto next13;} else if(i==4){if(aa[3].pads==5)goto next13;} else if(aa[i-1].pads==5||aa[i+1].pads==5)goto next13; return 0;next13: for(i=0;i<5;i++) if(aa[i].smoke==1)goto next13_1;next13_1: if(i==0){if(aa[1].pads==2)goto next14;} else if(i==4){if(aa[3].pads==2)goto next14;} else if(aa[i-1].pads==2||aa[i+1].pads==2)goto next14; return 0;next14: for(i=0;i<5;i++) if(aa[i].smoke==1)goto next14_1;next14_1: if(i==0){if(aa[1].drink==5)goto next15;} else if(i==4){if(aa[3].drink==5)goto next15;} else if(aa[i-1].drink==5||aa[i+1].drink==5)goto next15; return 0;next15: return 1;}char color[4]={1,2,3,5};char drink[4]={1,3,4,5};char guojia[4]={2,3,4,5};char smoke[]={1,2,3,4,5};char pads[5]={1,2,3,4,5};int rot(char a[],int n){ int i,j,k,t; for(k=n-1;k>0;k--) if(a[k-1]<a[k])break; if(k==0) { for(i=0,j=n-1;i<j;i++,j--) {char t=a[i]; a[i]=a[j]; a[j]=t; } return 0; } t=a[k-1];i=k; for(j=k+1;j<n;j++) if(t<a[j]&&a[j]<a[i])i=j; a[k-1]=a[i];a[i]=t; for(i=k;i<n-1;i++) for(j=k;j<n-1+k-i;j++) if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } return 1;}int main(){ int i,j,k,ans=0; int i1,i2,i3,i4,i5; aa[1].color=4; aa[2].drink=2; aa[0].guojia=1; for(i1=0;i1<24;i1++){ aa[0].color=color[0]; aa[2].color=color[1]; aa[3].color=color[2]; aa[4].color=color[3]; rot(color,4); for(i2=0;i2<24;i2++){ aa[0].drink=drink[0]; aa[1].drink=drink[1]; aa[3].drink=drink[2]; aa[4].drink=drink[3]; rot(drink,4); for(i3=0;i3<24;i3++){ aa[1].guojia=guojia[0]; aa[2].guojia=guojia[1]; aa[3].guojia=guojia[2]; aa[4].guojia=guojia[3]; rot(guojia,4); for(i4=0;i4<120;i4++){ for(i=0;i<5;i++) aa[i].smoke=smoke[i]; rot(smoke,5); for(i5=0;i5<120;i5++){ for(j=0;j<5;j++) aa[j].pads=pads[j]; rot(pads,5); if(OK()){ printf("---------------------第%d种解---------------------\n",++ans); for(k=0;k<5;k++) printf("第%d户: %s人 %s房子 养%s 喝%s 抽%s\n",k+1,GUO[aa[k].guojia], COL[aa[k].color],PAD[aa[k].pads],DRK[aa[k].drink],SMK[aa[k].smoke]); }}}}}} return 0;}
运行结果表明:总共有七组可能的解答,具体如下
---------------------第1种解---------------------
第1户: 挪威人 黄房子 养猫 喝水 抽Dunhill
第2户: 丹麦人 蓝房子 养马 喝茶 抽Blends
第3户: 英国人 红房子 养鸟 喝牛奶 抽Pall Mall
第4户: 德国人 绿房子 养鱼 喝咖啡 抽Prince
第5户: 瑞典人 白房子 养狗 喝啤酒 抽BlueMaster
---------------------第2种解---------------------
第1户: 挪威人 绿房子 养鸟 喝咖啡 抽Pall Mall
第2户: 德国人 蓝房子 养猫 喝水 抽Prince
第3户: 英国人 红房子 养马 喝牛奶 抽Blends
第4户: 丹麦人 黄房子 养鱼 喝茶 抽Dunhill
第5户: 瑞典人 白房子 养狗 喝啤酒 抽BlueMaster
---------------------第3种解---------------------
第1户: 挪威人 绿房子 养鸟 喝咖啡 抽Pall Mall
第2户: 德国人 蓝房子 养鱼 喝水 抽Prince
第3户: 英国人 红房子 养马 喝牛奶 抽Blends
第4户: 丹麦人 黄房子 养猫 喝茶 抽Dunhill
第5户: 瑞典人 白房子 养狗 喝啤酒 抽BlueMaster
---------------------第4种解---------------------
第1户: 挪威人 绿房子 养鱼 喝咖啡 抽Blends
第2户: 德国人 蓝房子 养猫 喝水 抽Prince
第3户: 瑞典人 黄房子 养狗 喝牛奶 抽Dunhill
第4户: 英国人 红房子 养马 喝啤酒 抽BlueMaster
第5户: 丹麦人 白房子 养鸟 喝茶 抽Pall Mall
---------------------第5种解---------------------
第1户: 挪威人 绿房子 养鸟 喝咖啡 抽Pall Mall
第2户: 德国人 蓝房子 养猫 喝水 抽Prince
第3户: 瑞典人 白房子 养狗 喝牛奶 抽Blends
第4户: 英国人 红房子 养马 喝啤酒 抽BlueMaster
第5户: 丹麦人 黄房子 养鱼 喝茶 抽Dunhill
---------------------第6种解---------------------
第1户: 挪威人 绿房子 养鸟 喝咖啡 抽Pall Mall
第2户: 德国人 蓝房子 养猫 喝水 抽Prince
第3户: 瑞典人 白房子 养狗 喝牛奶 抽Blends
第4户: 丹麦人 黄房子 养鱼 喝茶 抽Dunhill
第5户: 英国人 红房子 养马 喝啤酒 抽BlueMaster
---------------------第7种解---------------------
第1户: 挪威人 绿房子 养鸟 喝咖啡 抽Pall Mall
第2户: 德国人 蓝房子 养鱼 喝水 抽Prince
第3户: 瑞典人 白房子 养狗 喝牛奶 抽Blends
第4户: 丹麦人 黄房子 养猫 喝茶 抽Dunhill
第5户: 英国人 红房子 养马 喝啤酒 抽BlueMaster
---------------------第1种解---------------------
第1户: 挪威人 黄房子 养猫 喝水 抽Dunhill
第2户: 丹麦人 蓝房子 养马 喝茶 抽Blends
第3户: 英国人 红房子 养鸟 喝牛奶 抽Pall Mall
第4户: 德国人 绿房子 养鱼 喝咖啡 抽Prince
第5户: 瑞典人 白房子 养狗 喝啤酒 抽BlueMaster
---------------------第2种解---------------------
第1户: 挪威人 绿房子 养鸟 喝咖啡 抽Pall Mall
第2户: 德国人 蓝房子 养猫 喝水 抽Prince
第3户: 英国人 红房子 养马 喝牛奶 抽Blends
第4户: 丹麦人 黄房子 养鱼 喝茶 抽Dunhill
第5户: 瑞典人 白房子 养狗 喝啤酒 抽BlueMaster
---------------------第3种解---------------------
第1户: 挪威人 绿房子 养鸟 喝咖啡 抽Pall Mall
第2户: 德国人 蓝房子 养鱼 喝水 抽Prince
第3户: 英国人 红房子 养马 喝牛奶 抽Blends
第4户: 丹麦人 黄房子 养猫 喝茶 抽Dunhill
第5户: 瑞典人 白房子 养狗 喝啤酒 抽BlueMaster
---------------------第4种解---------------------
第1户: 挪威人 绿房子 养鱼 喝咖啡 抽Blends
第2户: 德国人 蓝房子 养猫 喝水 抽Prince
第3户: 瑞典人 黄房子 养狗 喝牛奶 抽Dunhill
第4户: 英国人 红房子 养马 喝啤酒 抽BlueMaster
第5户: 丹麦人 白房子 养鸟 喝茶 抽Pall Mall
---------------------第5种解---------------------
第1户: 挪威人 绿房子 养鸟 喝咖啡 抽Pall Mall
第2户: 德国人 蓝房子 养猫 喝水 抽Prince
第3户: 瑞典人 白房子 养狗 喝牛奶 抽Blends
第4户: 英国人 红房子 养马 喝啤酒 抽BlueMaster
第5户: 丹麦人 黄房子 养鱼 喝茶 抽Dunhill
---------------------第6种解---------------------
第1户: 挪威人 绿房子 养鸟 喝咖啡 抽Pall Mall
第2户: 德国人 蓝房子 养猫 喝水 抽Prince
第3户: 瑞典人 白房子 养狗 喝牛奶 抽Blends
第4户: 丹麦人 黄房子 养鱼 喝茶 抽Dunhill
第5户: 英国人 红房子 养马 喝啤酒 抽BlueMaster
---------------------第7种解---------------------
第1户: 挪威人 绿房子 养鸟 喝咖啡 抽Pall Mall
第2户: 德国人 蓝房子 养鱼 喝水 抽Prince
第3户: 瑞典人 白房子 养狗 喝牛奶 抽Blends
第4户: 丹麦人 黄房子 养猫 喝茶 抽Dunhill
第5户: 英国人 红房子 养马 喝啤酒 抽BlueMaster
- 爱因斯坦难题的C语言程序设计
- 爱因斯坦难题
- 用程序解密爱因斯坦经典难题(C++)
- 爱因斯坦斑马难题
- 爱因斯坦难题C++解法
- C语言程序设计的题目
- C语言实例 爱因斯坦的数学题
- C语言编程--爱因斯坦的阶梯问题
- 关于c语言程序设计的两道题
- DSP的C/C++语言程序设计
- C~K的难题
- 用程序解密爱因斯坦经典难题
- c语言程序设计
- c语言程序设计
- c语言程序设计
- C语言程序设计
- C语言程序设计
- C语言程序设计
- MongoDB的聚合框架
- Hadoop安装-安装步骤
- 让svn支持https协议的checkout
- android progressdialog 对话框试用实例
- google protocol buffer基础
- 爱因斯坦难题的C语言程序设计
- poj 1611 并查集
- 小米2013年校园招聘笔试题——朋友圈
- Android IM客户端登陆Openfire 之一
- hdu4465 Candy(快速排列组合+概率)
- HDU 1024
- POJ-2352-Stars
- 最受欢迎的8位Java牛人
- 最新县及县以上行政区划代码(截止2013年1月18日) 全国省市县数据库 之县级数据