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

PASCAL语言要求过程
2024年11月29日 20:56
有5个网友回答
网友(1):

分析:题目的意思是只有一个是小偷,4个人中有一个人说谎,说谎的人就是小偷。扣住这一点分别假设某人为小偷,来判别4个人说的话真假,当3个人说的话是真的,就是这个题的解。用C++编程如下:
#include
using namespace std;
int main()
{
char thief;
for (thief='a';thief<='d';thief++)
if ((thief!='a')+(thief=='c')+(thief=='d')+(thief!='d')==3) cout<}

我不会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编译通过。

网友(2):

题目的意思是只有一个人在说谎。

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

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

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

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

∴c在说谎。

如有疑问欢迎追问

如果满意谢谢采纳

网友(3):

往往最着急说不是小偷的人是小偷
所以说A是小偷
我说对了吗?
哈哈.....

网友(4):

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.

网友(5):

我想B应该是,B为什么知道C是小偷!