PASCAL问题。比较难的,很有挑战性!

来源:百度知道 编辑:UC知道 时间:2024/04/29 00:21:42
有A,B,C,D四名偷窃嫌疑犯,其中有一人是小偷,审问中,A说:“我不是小偷。B说;C是小偷。C说:小偷肯定是D。D说:C在冤枉人。”
有三人说真话,一人说假话,到底谁是小偷。

program ttt;
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.

……
简单,穷举即可。

定义数组a[4]
for i:=1 to 4 do
begin
for j:=1 to 4 do a[j]:=0;
a[i]:=1;
if ((a[1]<>1)+(a[3]=1)+(a[4]=1)+(a[4]<>1))=3 then writeln(i);
end;

应该是这样,算法很简单,设一个数组a[4],其中的四个数据分别代表a b c d是不是小偷,是为1不是为0
然后用循环使这几个人轮流做小偷,同时将上面4个判断的真值加起来,如果真值为3那么小偷就找到啦~

program l_1(input,output);
var
a:char;
begin
for a:='A' to 'D' do
if (