谁会做这题,就牛!
挺好的啊,很不错,题很全的
1 Today is my thirtieth birthday .
2 Do they have a school trip every year?
3 May is the fifth month of a year.
4 Can you do what you like after class?
5 We can do sports with friends after school.
养的不同的宠物,喜欢和不同的饮料,抽不同牌子的烟。现在已知以下的一些信息
:
英国人(englishman)住在红色(red)的房子里。
西班牙人(spaniard)养了一条狗(dog)。
挪威人(norwegian)住在左边的第一个房子里。
黄房子(yellow)里的人喜欢抽kools牌的香烟。
抽chesterfields牌香烟的人与养狐狸(fox)的人是邻居。
挪威人(norwegian)住在蓝色(blue)的房子旁边。
抽winston牌香烟的人养了一只蜗牛(Snails)。
抽Lucky Strike牌香烟的人喜欢喝桔子汁(orange juice)。
乌克兰人(ukrainian)喜欢喝茶(tea)。
日本人(japanese)抽parliaments牌的烟。
抽kools牌的香烟的人与养马(horse)的人是邻居。
喜欢喝咖啡(coffee)的人住在绿(green)房子里。
绿(green)房子在象牙白(ivory)房子的右边(图中的右边)。
中间那个房子里的人喜欢喝牛奶(milk)。
根据以上条件,你能告诉我哪个房子里的人养斑马(zebra),哪个房子里的人喜
欢喝水(water)吗?或者你能把所有的东西都对号入座吗?
这是个典型的条件约束的问题,根据每个条件,我们都可以排除一些情况,直到最
后找到答案。不过由于这个问题的条件太多,如果人工来解答,是很要花上一点时
间的。还不如我们用这个时间来编一个程序,让计算机来解答。真的,编程花的时
间一定要比人工计算还要少!
使用Prolog来解决这类的问题,一般使用的是“选择再校验”的方法。即用某种方
法提出一系列的可能的解,再由校验部分来判断此解是否合乎题意。直到找到答案
为止。
我们先来分析一下到底有多少种可能的解。
每个房子有不同的颜色,所以就颜色来说就有5!种情况,而一共有五个特征:颜
色、国籍、宠物、香烟和饮料。所以一共就有5!*5种情况,即600种。不是很多,
完全可以使用程序穷举出来。
下面介绍如何使用Prolog来编写解答的程序。
在此程序中使用结构h(C,N,P,Y,D)来储存房间的信息。C,N,P,Y,D分别对应颜色、
国籍、宠物、香烟和饮料。由于有五个房间,所以使用列表来储存所有房间的信息
。此列表为:
[h(C1,N1,P1,Y1,D1),h(C2,N2,P2,Y2,D2),h(C3,N3,P3,Y3,D3),h(C4,N4,P4,Y4,
D4),h(C5,N5,P5,Y5,D5)]
一开始所有房间的情况都是未知的,所以就使用变量来代表每个房间的情况。
在后面的条件中经常要读取房间的某个信息,所以下面就先编写五个谓词来完成这
项工作。
color(h(C,N,P,Y,D),C).
nation(h(C,N,P,Y,D),N).
pet(h(C,N,P,Y,D),P).
yan(h(C,N,P,Y,D),Y).
drink(h(C,N,P,Y,D),D).
这几个谓词很容易理解,所以就不多作解释了。
在条件中还用到了房间之间的相对位置的信息,下面的谓词就是完成这个任务的。
next(A,B,[A,B,C,D,E]).
next(B,C,[A,B,C,D,E]).
next(C,D,[A,B,C,D,E]).
next(D,E,[A,B,C,D,E]).
next(B,A,[A,B,C,D,E]).
next(C,B,[A,B,C,D,E]).
next(D,C,[A,B,C,D,E]).
next(E,D,[A,B,C,D,E]).
middle(X,[_,_,X,_,_]).
first(A,[A|X]).
上面,next/3用来判断列表中两个元素是否相邻;middle/2用来读取列表的中间的
元素;first/2读取列表的第一个元素。当然,next/3不但可以判断相邻,它还能
找出相邻的元素来。例如:
?- next(4,X,[1,2,3,4,5]).
X = 5 ;
X = 3 ;
no
很明显,next找出了列表[1,2,3,4,5]中与4相邻的元素。这里列表的元素是简单的
数字,如果是上面说所的表示房间信息的结构h(C,N,P,Y,D),它的功能也是相同的
。
前面说过,我们将使用“选择再校验”的方法找出答案,那么我们靠什么来选择呢
?这里将使用以前介绍过的member/2谓词。还记得member/2的定义么?
member(A,[A|X]).
member(A,[B|X]) :- member(A,X).
它的第二个参数是一个列表,它可以判断第一个参数是否在这个列表中。我们是使
用递归的方法编写member/2的,如果不太清楚,请阅读列表这一章。
?- member(2,[1,2,3]).
yes
我们曾经说过Prolog的谓词有多种使用方法,所以member/2还可以用来遍历列表的
所有元素。
?-member(X,[1,2,3,4,5]).
X = 1 ;
X = 2 ;
X = 3 ;
X = 4 ;
X = 5 ;
no
这正是我们需要的功能,使用它就可以选择出所有的情况了。
有了以上的准备工作,我们就可以开始正式编写解答部分了。我们先把程序列出来
,然后再来讲解。解题的谓词为solve/3,第一个参数X返回所以东西对号入座后的
房间列表,第二参数TT返回养斑马的人住的房间,第三个参数TTT返回喜欢喝水的
人的房间。
solve(X,TT,TTT):-
%首先把X绑定为房间列表,注意此时的房间的属性还不能确定,所以都使用变量
代表。
X=[h(C1,N1,P1,Y1,D1),h(C2,N2,P2,Y2,D2),h(C3,N3,P3,Y3,D3),h(C4,N4,P4,
Y4,D4),h(C5,N5,P5,Y5,D5)],
%英国人(englishman)住在红色(red)的房子里。
member(Z1,X), %首先从X列表中选择一个房间Z1,
color(Z1,red), %Z1的颜色是red。
nation(Z1,englishman), %Z1里住的人是englishman。 下同。
%西班牙人(spaniard)养了一条狗(dog)。
member(Z2,X),
pet(Z2,dog),
nation(Z2,spaniard),
%挪威人(norwegian)住在左边的第一个房子里。
first(Z3,X),
nation(Z3,norwegian),
%黄房子(yellow)里的人喜欢抽kools牌的香烟。
member(Z4,X),
yan(Z4,kools),
color(Z4,yellow),
%抽chesterfields牌香烟的人与养狐狸(fox)的人是邻居。
member(Z5,X),
pet(Z5,fox),
next(Z6,Z5,X), %用next(Z5,Z6,X)也一样。
yan(Z6,chesterfields),
%挪威人(norwegian)住在蓝色(blue)的房子旁边。
member(Z7,X),
color(Z7,blue),
next(Z8,Z7,X),
nation(Z8,norwegian),
%抽winston牌香烟的人养了一只蜗牛(Snails)。
member(Z9,X),
yan(Z9,winston),
pet(Z9,snails),
%抽Lucky Strike牌香烟的人喜欢喝桔子汁(orange juice)。
member(Z10,X),
drink(Z10,'orange juice'),
yan(Z10,'Lucky Strike'),
%乌克兰人(ukrainian)喜欢喝茶(tea)。
member(Z11,X),
nation(Z11,ukrainian),
drink(Z11,tea),
%日本人(japanese)抽parliaments牌的烟。
member(Z12,X),
nation(Z12,japanese),
yan(Z12,parliaments),
%抽kools牌的香烟的人与养马(horse)的人是邻居。
member(Z13,X),
pet(Z13,horse),
next(Z14,Z13,X),
yan(Z14,kools),
%喜欢喝咖啡(coffee)的人住在绿(green)房子里。
member(Z15,X),
color(Z15,green),
drink(Z15,coffee),
%绿(green)房子在象牙白(ivory)房子的右边(图中的右边)。
member(Z16,X),
color(Z16,ivory),
next(Z17,Z16,X), %这里我们没有使用右边的条件,而是假设它们是邻居,所
以最后的答案有两个。
color(Z17,green), %这一点请读者自己修改,当然还需要编写一个判断右边的
谓词。
%中间那个房子里的人喜欢喝牛奶(milk)。
middle(Z18,X),
drink(Z18,milk),
%以上是所有的条件,下面开始回答我们的问题。
%找出宠物为zebra的房间。
member(TT,X),
pet(TT,zebra),
%找出喝水的房间。
member(TTT,X),
drink(TTT,water).
你阅读这个程序应该没有什么问题吧。它简直就是把我们的条件直接翻译成
Prolog语言。例如:
%抽chesterfields牌香烟的人与养狐狸(fox)的人是邻居。
member(Z5,X),
pet(Z5,fox),
next(Z6,Z5,X), %用next(Z5,Z6,X)也一样。
yan(Z6,chesterfields),
用语言来描述就是:首先Z5是个房子,对应于member(Z5,X);然后它的宠物是fox
,对应于pet(Z5,fox);它的邻居是Z6,对应于next(Z6,Z5,X);最后Z6的人抽
chesterfields,对应于yan(Z6,chesterfields)。你看只要把原始的条件稍加分解
,就变成了我们的Prolog程序。
哈哈,这样的程序谁都可以编出来,你看到Prolog的优势了吧。Prolog是描述型的
语言,你只要使用Prolog的语言把问题描述一遍就行了,剩下的问题就让计算机代
劳吧:)。如果使用其它的语言,例如C、Basic等,你就不得不自己考虑程序的流程
,所以这些语言都叫作过程型的语言。比起Prolog可是低级多了。
好了,最后让我们来运行一下程序。
?- solve(X,TT,TTT).
X = [h(yellow,norwegian,fox,kools,water),h(blue,ukrainian,horse,
chesterfields,tea),
h(red,englishman,snails,winston,milk),h(iory,spaniard,dog,'Lucky
Strike','orange juice'),
h(green,japanese,zebra,parliaments,coffee)]
TT = h(green,japanese,zebra,parliaments,coffee)
TTT = h(yellow,norwegian,fox,kools,water) ;
X = [h(yellow,norwegian,fox,kools,water),h(blue,ukrainian,horse,
chesterfields,tea),
h(red,englishman,snails,winston,milk),h(green,japanese,zebra,
parliaments,coffee),
h(ivory,spaniard,dog,'Lucky Strike','orange juice')]
TT = h(green,japanese,zebra,parliaments,coffee)
TTT = h(yellow,norwegian,fox,kools,water)
no
由于第13个条件中我们没有使用题目中的右边的限制,所以答案就有两个,你可以
看到这两个答案的最后两个房间正好倒了过来。
再花点功夫把答案更美观地写出来,这个程序就完美了。
1、挪威人,黄色房子,Dunhill,喝矿泉水水,养猫
2、丹麦人,蓝色房子,混合烟,喝茶,养马
3、英国人,红色房子,Pall Mall ,喝牛奶,养鸟
4、德国人,绿色房子,Prince,喝咖啡,养鱼
5、瑞典人,白色房子,Blue Master,喝啤酒,养狗
答案应该是:
1、挪威人,黄色房子,Dunhill,喝矿泉水,养猫
2、丹麦人,蓝色房子,混合烟,喝茶,养马
3、英国人,红色房子,Pall Mall ,喝牛奶,养鸟
4、德国人,绿色房子,Prince,喝咖啡,养?
5、瑞典人,白色房子,Blue Master,喝啤酒,养狗
lovelyariel - 见习魔法师 二级 ,还蛮认真的吗,过程还要写.
1、挪威人,黄色房子,Dunhill,喝矿泉水,养猫
2、丹麦人,蓝色房子,混合烟,喝茶,养马
3、英国人,红色房子,Pall Mall ,喝牛奶,养鸟
4、德国人,绿色房子,Prince,喝咖啡,养?
5、瑞典人,白色房子,Blue Master,喝啤酒,养狗
一楼的白痴,写这么多,都懒得看了,自己的打稿纸写就行了吗,还要写出来.麻烦
一共有18头牛,走了5头牛,又来了6头牛,原来有多少只牛?怎么做这道题?
可以这样做一共的减去走了的在加上又来的就等于剩下的减又来的等于原来的 18-5+6-6=13(头)答:原来有13头牛。
求趣味数学25题解析!
这道题是这样的:有一片牧场,养着27头牛,6天把草吃完;养牛23头,则9天把草吃完;如果养牛21头,那么几天能把徼场上的草吃完呢?请注意,牧场上的草是在不断生长的,而不是固定不变的。 史前期的算题 考古学家在西班牙发现了一处史前期壁画,上面除绘着一些人形和野兽的图形外,还绘着一些莫明其妙的算题,...
数学题.很简单
第四题 因为3人关系不好,所以这三人不会投同一人,所以无论是谁都会失去这两票,因此40-2=38 38\/2=19 只要拿到19人的票, 就能确保当选太守 第五题 到达的方法有3种,分别是3+3+3+11、3+3+7+7、5+5+5+5,因此答案是4次 第六题 这题可看作刘备没零钱,就是结果他手上拿了50两假...
上海的城管用道德经给全球数学竞赛出题,这样的题目你会做吗?
你没有办法把它精确的绘画出来,这跟哲学是相通的,所以用这个理论来出数学题。这样的题我肯定是不会做的。2、学习数学一定要有兴趣。很多人一想起来数学就头疼,这是因为学数学的时候没有兴趣,那么就会感觉非常枯燥,而且数学一般都是连贯的,一旦有哪个节点没有看懂,后面就越来越不懂,所以很多人都...
理综选择题有没有什么猜题的技巧,对于实在不会做的只能靠猜了,但要...
理综选择题答题的技巧 对于选择题,基础再不好的同学也有四分之一中标的概率,而对于大题来说,只要你第一感觉不会做这道题,如果没有思路的话,别说四分之一,四百分之一中标的概率都不可能。首先要清楚自己最擅长的科目,但做题一般还是按试卷上的顺序,如果遇到不会做的,就做一个自己擅长的科目...
奥数题出点
请你接这种方法做一道题。 有四人捐款救灾。乙捐款为甲的2倍,丙捐款为乙的3倍,丁捐款为丙的4倍。他们共捐款132元。求四人各捐款多少元? 牛顿问题 英国伟大的科学家牛顿,曾经写过一本数学书。书中有一道非常有名的、关于牛在牧场上吃草的题目,后来人们就把这类题目称为“牛顿问题”。 “牛顿问题”是这样...
数学题目,你能做对多少分!
即做了300÷30=10天之后 即第11天从A地转到B地。2. 有三块草地,面积分别是5,15,24亩.草地上的草一样厚,而且长得一样快.第一块草地可供10头牛吃30天,第二块草地可供28头牛吃45天,问第三块地可供多少头牛吃80天?这是一道牛吃草问题,是比较复杂的牛吃草问题。把每头牛每天吃的草看作1份。因为第...
备考一开始就做二建真题有效果吗
第三、多方面做题,挖掘知识点 这个是想告诉大家不要以为买一套真题做一下就没事了,对待真题要认真,把自己错误的题里面的知识点提炼出来,进行梳理记忆,不要错了就错了,改成正确答案就万事大吉了。正确选项为什么正确,错误选项为什么是错误的,自己为什么会选错,自己记忆哪里出现了问题,要学会更正...
有一棵树,在距树7米的地方有一堆草,一头牛用一根3米的绳子栓着,这头...
因为牛没拴在树上,只要牛拴在草堆3米范围内就行。解析:这是一道脑筋急转弯题目,看似很简单,但实际上藏着很深的套路。如果按照常规思维去思考这道题,就会觉得它很难解答。题目中,包含了:树、草堆、牛三个主体,还有7米、3米迷惑性的数字。如果先入为主的认定3米小于7米就很难解题。但仔细...
牛肉面汤一百斤水放多少盐,多少味精?怎么做好吃?
按照你说的牛头汤里放100斤水放多少盐,你问的这个问题,其实就是一个不懂牛肉汤调制的问题。首先,你要知道一般在熬制牛肉汤的时间大概在2个小时左右,如果汤里放入牛棒骨,那么熬制时间大概在4个小时左右,在这个时间段里熬制,汤里的水分会不断的减少,也就是说牛肉汤刚开始的100斤在熬制完成时,就不到100斤了...
氐审益肝: 5+4=6+3=7+2=8+1=9+0
乌兰察布盟15567831899: 谁会做这题,就牛! - ?
氐审益肝: 1、挪威人,黄色房子,Dunhill,喝矿泉水水,养猫2、丹麦人,蓝色房子,混合烟,喝茶,养马3、英国人,红色房子,Pall Mall ,喝牛奶,养鸟4、德国人,绿色房子,Prince,喝咖啡,养鱼5、瑞典人,白色房子,Blue Master,喝啤酒,养狗
乌兰察布盟15567831899: 世界上最牛B的问题,谁能答出来就是奇人了! - ?
氐审益肝: 德国人养鱼.推理思路:(建议在纸上画个表格,会简单清晰点)从左到右为房子标号:1 2 3 4 5由上到下:颜色a,国籍b,饮料c,香烟d,宠物e(1)∵英国人住红色房子,挪威人住蓝色房子隔壁∴挪威人房子的颜色只能是绿、黄、白,...
乌兰察布盟15567831899: 传说是爱因斯坦出的题,全世界只有百分之十的人能做出来,望各位能指点一下!想 - ?
氐审益肝: 德国人 推理过程:首先定位一点,我们是按照房子的位置,从左至右,12345依次排开挪威人住第1间房,在最左边.∵英国人住红色房子,挪威人住蓝色房子隔壁,∴挪威人房子的颜色只能是绿、黄、白,又∵绿色房子在白色房子左面,挪...
乌兰察布盟15567831899: 史上最牛的小学数学题,谁能解答? - ?
氐审益肝: 哈哈,有意思.妈妈比小孩大21岁,六年后妈妈的年龄是小孩年龄的5倍 ,就是妈妈年龄比小孩年龄大4倍,所以: 小孩年龄是 21/4=5.25(岁) 但这是6年以后的事.6-5.25=0.75年 这是十月怀胎之始啊.所以,爸爸在......妈妈的肚子上.哈哈哈啊哈哈哈
乌兰察布盟15567831899: 一条船上有75头牛,34只羊,问船长几岁? - ?
氐审益肝: 没标准答案. “案例,有一个中小学的老师,对中小学生出了一个考题.同学们,现在我要提问题,问大家.在一条船上有75头牛,有32只羊,问船长的年龄有多大,这个船上有75头牛,有32只羊,问船长的年龄有多大.抽样调查的结果,一...
乌兰察布盟15567831899: 初中九年级概率题目,,谁能做出来算谁厉害,重金奖励.... - ?
氐审益肝: 假设想要分出胜负,至少要再赌一局(甲胜),两局(甲胜),三局(甲胜),四局(甲胜或者乙胜),不可能有超过四局分出胜负的可能,那么可以计算在甲方胜了5局,乙胜利了2局的情况下,甲胜的概率和乙胜的概率,通过概率分配赌金....
乌兰察布盟15567831899: 那位数学天才做得起这道题就算厉害某八位数形如2abcdefg(2abcdefg是一个数),它与3的乘积形如abcdefg4,则七位数abcdefg应该是_______________.... - ?
氐审益肝:[答案] ABCDEFG=8571428首先可以确定G,因为只有8*3才得到尾数是4,所以G是8,3*8=24,而尾数是4所以等于是进了个2,用8-2再除以3得到2,也就是F等于2了,这次没有进位,直到了得数百位是2而且没有进位,从而知道只有4*3尾数才可能是...
乌兰察布盟15567831899: ( )、( )、( )、2,4,6,7,8,神题谁会做?
氐审益肝: -4 -2 0
乌兰察布盟15567831899: 网上最牛的一道数学题!10人做9人错,交易所规定这题不会做,禁止入股市.?
氐审益肝: 97元吧 79元现金和一个成本18块钱的礼物