小偷问题:A,B,C,D四个人,A说:我不是小偷;B说:C是小偷;C说:D是小偷;D说:C冤枉人。

PASCAL语言要求过程... PASCAL语言
要求过程
展开
 我来答
轻盈又鲜明的典范5100
2006-12-12 · 超过37用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:0
展开全部
分析:题目的意思是只有一个是小偷,4个人中有一个人说谎,说谎的人就是小偷。扣住这一点分别假设某人为小偷,来判别4个人说的话真假,当3个人说的话是真的,就是这个题的解。用C++编程如下:
#include<iostream>
using namespace std;
int main()
{
char thief;
for (thief='a';thief<='d';thief++)
if ((thief!='a')+(thief=='c')+(thief=='d')+(thief!='d')==3) cout<<thief<<endl;
}

我不会PASCAL语言 ,但你可以转化一下就行了,程序输出结果为C,C是小偷。那我们代入4个人说的话:
1、A说我不是小偷,成立。
2、B说C是小偷,成立。
3、C说D是小偷,不成立。
4、D说C冤枉人(D不是小偷),成立。

所以这题的最终解是C是小偷,大家快来抓住他啊!嘿嘿!
曾经有学一会儿delphi,也是pascal语言为基础的,那我就用在delphi编一个吧:
procedure TForm1.Button1Click(Sender: TObject);
var
thief:char;
begin
for thief:='a' to 'd' do
begin
if (ord(thief<>'a')+ord(thief='c')+ord(thief='d')+ord(thief<>'d'))=3 then edit1.Text:=edit1.Text+' '+thief;
end;
end;
请你转换一下就OK了。以上在delphi7.0编译通过。
汉秋英董胭
2019-05-25 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:26%
帮助的人:1092万
展开全部
题目的意思是只有一个人在说谎。

①如果a说谎,那么a是小偷。那么b说c是小偷就是假的。所以假设不成立。

②如果b说谎,那么c说d是小偷是真的,d说c冤枉人就是假的。所以假设也不成立。

③如果c说谎,那么d不是小偷,d说c冤枉人是真的,b说c是小偷是真的,a说自己不是小偷也是真的。符合逻辑。

④如果d说谎,那么c没有冤枉人,d是小偷。b说c是小偷就是假的。所以假设不成立。

∴c在说谎。

如有疑问欢迎追问

如果满意谢谢采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yafei080
2006-12-12 · TA获得超过834个赞
知道小有建树答主
回答量:508
采纳率:100%
帮助的人:0
展开全部
往往最着急说不是小偷的人是小偷
所以说A是小偷
我说对了吗?
哈哈.....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
米毅画啊职8507
2006-12-12 · TA获得超过104个赞
知道答主
回答量:183
采纳率:0%
帮助的人:0
展开全部
program l_thief;
var
thief:char;
procedure findthief;
var
i:char;
begin
for i:=\'A\' to \'D\' do
begin
if ord(i<>\'A\')+ord(i=\'C\')+ord(i=\'D\')+ord(i<>\'D\')=3 then break;
end;
thief:=i;
end;
begin
findthief;
writeln(thief);
end.
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ch_hl2008
2006-12-12 · TA获得超过513个赞
知道小有建树答主
回答量:769
采纳率:0%
帮助的人:608万
展开全部
我想B应该是,B为什么知道C是小偷!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式