5个回答
展开全部
分析:题目的意思是只有一个是小偷,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编译通过。
#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编译通过。
展开全部
题目的意思是只有一个人在说谎。
①如果a说谎,那么a是小偷。那么b说c是小偷就是假的。所以假设不成立。
②如果b说谎,那么c说d是小偷是真的,d说c冤枉人就是假的。所以假设也不成立。
③如果c说谎,那么d不是小偷,d说c冤枉人是真的,b说c是小偷是真的,a说自己不是小偷也是真的。符合逻辑。
④如果d说谎,那么c没有冤枉人,d是小偷。b说c是小偷就是假的。所以假设不成立。
∴c在说谎。
如有疑问欢迎追问
如果满意谢谢采纳
①如果a说谎,那么a是小偷。那么b说c是小偷就是假的。所以假设不成立。
②如果b说谎,那么c说d是小偷是真的,d说c冤枉人就是假的。所以假设也不成立。
③如果c说谎,那么d不是小偷,d说c冤枉人是真的,b说c是小偷是真的,a说自己不是小偷也是真的。符合逻辑。
④如果d说谎,那么c没有冤枉人,d是小偷。b说c是小偷就是假的。所以假设不成立。
∴c在说谎。
如有疑问欢迎追问
如果满意谢谢采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
往往最着急说不是小偷的人是小偷
所以说A是小偷
我说对了吗?
哈哈.....
所以说A是小偷
我说对了吗?
哈哈.....
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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.
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.
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我想B应该是,B为什么知道C是小偷!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询