turbo pascal ```求救..高手进

1、甲乙丙丁戊五个人在运动会上分获百米、二百米、跳高、跳远和铅球冠军,有四个人猜测比赛结果:A说:乙获铅球冠军,丁获跳高冠军。B说:甲获百米冠军,戊获跳远冠军。C说:丙获... 1、甲乙丙丁戊五个人在运动会上分获百米、二百米、跳高、跳远和铅球冠军,有四个人猜测比赛结果:
A说:乙获铅球冠军,丁获跳高冠军。
B说:甲获百米冠军,戊获跳远冠军。
C说:丙获跳远冠军,丁获二百米冠军。
D说:乙获跳高冠军,戊获铅球冠军。
其中每个人都只说对一句,说错一句。求五人各获哪项冠军。
展开
 我来答
qsc800528
2007-02-16 · TA获得超过2974个赞
知道大有可为答主
回答量:1383
采纳率:0%
帮助的人:1761万
展开全部
Private Sub Command1_Click()

Dim z As Integer
Dim A1 As Boolean 'A说的第一句话
Dim A2 As Boolean 'A说的第二句话
Dim B1 As Boolean 'B说的第一句话
Dim B2 As Boolean 'B说的第二句话
Dim C1 As Boolean 'C说的第一句话
Dim C2 As Boolean 'C说的第二句话
Dim D1 As Boolean 'D说的第一句话
Dim D2 As Boolean 'D说的第二句话
Dim Flag As Boolean
For z = 0 To 255

Flag = False

A1 = (z And 128) / 128
A2 = (z And 64) / 64
B1 = (z And 32) / 32
B2 = (z And 16) / 16
C1 = (z And 8) / 8
C2 = (z And 4) / 4
D1 = (z And 2) / 2
D2 = (z And 1) / 1

If A1 + A2 = 0 Then Flag = 1 '每个人说得不能全是假话
If B1 + B2 = 0 Then Flag = 1
If C1 + C2 = 0 Then Flag = 1
If D1 + D2 = 0 Then Flag = 1

If A1 * A2 = 1 Then Flag = 1 '每个人只能说一句真话
If B1 * B2 = 1 Then Flag = 1
If C1 * C2 = 1 Then Flag = 1
If D1 * D2 = 1 Then Flag = 1

If A1 * D1 = 1 Then Flag = 1 '每名运动员只能获得一项冠军
If A2 * C2 = 1 Then Flag = 1
If B2 * D2 = 1 Then Flag = 1

If A1 * D2 = 1 Then Flag = 1 '每个项目只能有一个冠军
If A2 * D1 = 1 Then Flag = 1
If B2 * C1 = 1 Then Flag = 1

If Flag = 0 Then Text1.Text = z
Next z

End Sub
通过上面的程序,可以求得z的值是105,对应的二进制为01101001
这样便知A说的第二句话,B说的第一句话,C说的第一句话,D说的第二句话是真话
对应的冠军是
丁获跳高冠军
甲获百米冠军
丙获跳远冠军
戊获铅球冠军
最后剩下的乙获二百米冠军

参考资料: http://www.programfan.com/club/showtxt.asp?id=90952

南方椰岛
2007-02-16 · TA获得超过744个赞
知道小有建树答主
回答量:271
采纳率:0%
帮助的人:0
展开全部
program Champions;
var a1,a2,a3,a4,a5:integer;
sum:integer;

function intToStr(s:integer):string;
var x:string;
begin
case s of
1:x:='Jia';
2:x:='Yi';
3:x:='Bing';
4:x:='Ding';
5:x:='Wu';
end;
intToStr:=x;
end;

procedure PrintResult;
begin
writeln('Answer #',sum,':');
writeln('100m:',intToStr(a1));
writeln('200m:',intToStr(a2));
writeln('TiaoGao:',intToStr(a3));
writeln('TiaoYuan:',intToStr(a4));
writeln('QianQiu:',intToStr(a5));
writeln;
end;

begin
sum:=0;
for a1:=1 to 5 do
for a2:=1 to 5 do
for a3:=1 to 5 do
for a4:=1 to 5 do
for a5:=1 to 5 do begin
if [a1,a2,a3,a4,a5]=[1..5] then
if ((a5=2) xor (a3=4)) and
((a1=1) xor (a4=5)) and
((a4=3) xor (a2=4)) and
((a3=2) xor (a5=5)) then begin
inc(sum);
PrintResult;
end;
end;
end.

----------------------------------
晕,竟然只有一组解||||||
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
111010000000
2007-02-17 · TA获得超过1.7万个赞
知道大有可为答主
回答量:4517
采纳率:0%
帮助的人:4842万
展开全部
这么Easy的题还问?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
米毅画啊职8507
2007-02-22 · TA获得超过104个赞
知道答主
回答量:183
采纳率:0%
帮助的人:0
展开全部
????
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式