【问题】甲乙丙丁戊五个人在运动会上分获百米、二百米、跳高、跳远和铅球冠军,有
四个人猜测比赛结果:
A说:乙获铅球冠军,丁获跳高冠军。
B说:甲获百米冠军,戊获跳远冠军。
C说:丙获跳远冠军,丁获二百米冠军。
D说:乙获跳高冠军,戊获铅球冠军。
其中每个人都只说对一句,说错一句。求五人各获哪项冠军。
【算法】用1,2,3,4,5分别代表百米、二百米、跳高、跳远和铅球5个项目,用a,b,c,d,e
分别代表五人。如b=3 表示乙获跳高冠军。用多重循环穷举出来。
【答案】甲 乙 丙 丁 戊
1 2 4 3 5
【参考程序】
var a,b,c,d,e:byte; begin for a:=1 to 5 do for b:=1 to 5 do if a<>b then for c:=1 to 5 do if (a<>c) and (b<>c then for d:=1 to 5 do if (a<>d) and (b<>d) and (c<>d) then begin e:=15-a-b-c-d; if (ord(b=5)+ord(d=3)=1) and (ord(a=1)+ord(e=4)=1) and (ord(c=4)+ord(d=2)=1) and (ord(b=3)+ord(e=5)=1) then writeln('a:',a,'b:',b,'c:',c,'d:',d,'e:',e); end; end.
【问题】5家工厂的产品在一次评比中分获1,2,3,4,5,在公布结果前,已知E
厂产品肯定不是第二、三名,五厂代表猜测评比结果,
A厂的代表说:E厂一定能获得第一名。
B厂的代表说:我厂的产品可能获第二名。
C厂的代表说:A厂的产品质量最次。
D厂的代表说:C厂的产品不是最好的。
E厂的代表说:D厂的产品会获得第一名。
公布结果后,证明只有产品获第一名和第二名的两个厂的代表猜对了。
求5个厂产品各获第几名。 【答案】 A B C D E
5 2 1 3 4
【参考程序】
var a,b,c,d,e:byte;
begin
for a:=1 to 5 do
for b:=1 to 5 do
for c:=1 to 5 do
for d:=1 to 5 do begin
e:=15-a-b-c-d;
if (e<>2) and (e<>3) and (a*b*c*d*e=120) then
if(ord(e=1)+ord(b=2)+ord(a=5)+
ord(c<>1)+ ord(d=1)=2) and
(ord((e=1) and ((a=1) or (a=2)))+
ord((b=2) and ((b=1) or (b=2)))+
ord((a=5) and ((c=1) or (c=2)))+
ord((c<>1) and ((d=1) or (d=2)))+
ord((d=1) and ((e=1) or (e=2)))
=2) then
writeln('a:',a,' b:',b,' c:',c,' d:',d,' e:',e);
end;
end.
【问题】有A、B、C、D四名偷窃嫌疑犯,其中一人是小偷,审问中,A说:“我
不是小偷”,B说:“C是小偷”,C说:“小偷肯定是D”,D说:“C
在冤枉人”,有三人说真话,一人说假话,问到底谁是小偷?
【参考程序】
var thief:char;
begin
for thief:='A' to 'D' do
if ord(thief<>'A')+ord(thief='C')+ord(thief='D')+
ord(thief<>'D')=3 then writeln('The Thief is : ',thief);
end.
|