free pascal编程题求解答(警察局抓了A 、B、C、D四名偷窃嫌疑犯,其中有一个是小偷。审问A说:“我……)

作者&投稿:徒佩 (若有异议请与网页底部的电邮联系)
逻辑推理题(谁是小偷)警察局抓了 a b c d四名偷窃嫌疑犯,其中一个是小偷, a 说:我不是小偷~

#include
#include
main()
{
int a[5],h[5],i; //h数组代表4个人说的是真话还是假话,a数组表示a,b,c,d
for (i=1;i<=4;i++)
{
h[1]=h[2]=h[3]=h[4]=1; //默认4个人都是真话
a[1]=a[2]=a[3]=a[4]=0; //默认4个人都不是小偷
h[i]=0; //选择其中1人说假话
if (h[4]==1) {h[3]=0;} else {h[3]=1;} //因为这个是对其他真假话的判断,会影响下面的判断,所以要放最前面
if (h[1]==1) {a[1]=0;} else {a[1]=1;}
if (h[2]==1) {a[3]=1;} else {a[3]=0;}
if (h[3]==1) {a[4]=1;} else {a[4]=0;}
if ((a[1]+a[2]+a[3]+a[4])==1) //等于1就是只有1个小偷,其他都是0(不是小偷)
{
for (i=1;i<=4;i++)
{
if (a[i]==1) {printf("%d
",i);} //输出小偷
}
}
}
getch();
return 0;
}

var f:array['a'..'d'] of boolean;
s:longint;
ch:char;
begin
for ch:='a' to 'd' do
begin
f[ch]:=true; //枚举谁是小偷,做标记
s:=0; //说真话数量计数器
if not f['a'] then inc(s); //a不是小偷则计数器加一
if f['c'] then inc(s); //c是小偷则s+1
if f['d'] then inc(s); //d是小偷则s+1
if not f['d'] then inc(s); //d不是小偷则s+1
if s=3 then writeln(ch); //如果说真话的数量有三句说明当前枚举的小偷是正确的
f[ch]:=false; //释放标记,枚举下个小偷
end;
end.

是C
如果A说的是真话 那么小偷是B 由此可推出D说的也是真话
如果B说的是真话 那么C说的也是真话
如果C说的是真话 那么B说的是假话 小偷不是D D说的就是真话
如果D说的是真话 那么B说的是假话 就不是D C说的是假话 那么是C偷的 所以A说的也是假话

var
a,b,c,d:integer;
begin
for a:=0 to 1 do
for b:=0 to 1 do
for c:=0 to 1 do
for d:=0 to 1 do
if (a+b+c+d=1) then
if ord(a<>1)+ord(c=1)+ord(d=1)+ord(d<>1)=3 then
begin
if a=1 then writeln('A is killer.');
if b=1 then writeln('B is killer.');
if c=1 then writeln('C is killer.');
if d=1 then writeln('D is killer.');
end;
readln;
end.

C是小偷

:?❼❻六四⒌⑤≯≌°㏒δフホベベッョ「。ㅍㅌㅋㅗ㈀㈂㈃㈌㉸㈈㈊㈁┈㊚▔▕☾○ΔΠΣΣÐÐÓÔ÷÷þǔǔæa:vhwjɔ:ɔiはたてどばゃゅゐ

c


桐梓县13475379556: 两道非常简单的编程题(Free pascal)!! -
谭泳莲必: 第一题:(1)把a:=a+1;这句话去掉(2)把a赋个初值,因为默认值为0,0不能作为除数,你1/a自然就是错的(3) 这个和第二个程序问题一样 第二题:pascal 中不支持连等,比如a=b=c要写成(a=b) and(b=c)

桐梓县13475379556: 一个小球从100米处自由落下,落地后弹回高度的一半后再落下,求20次着地时,小球通过了多少路程?用free pascal的while语句解决 -
谭泳莲必:[答案] 0.00000298023m

桐梓县13475379556: Free Pascal编程计算s=1+2+3……+100我编了一个程序,可我计算出来是100,正确答案是5050,求大神解答! -
谭泳莲必: 你的程序中是 s:=s+1; (100个1相加自然等于 100) 应该是 s:=s+i;

桐梓县13475379556: 请用Free Pascal解答以下3道题.请答案简单一点,我是一个小菜鸟. -
谭泳莲必: 先打一下第二题:var a,b,c,m:longint; begin a:=36 div 3; b:=(48+a) div 3; c:=(64+a+b) div 3; writeln(a:4,48+a:4,64+a:4); writeln(a+b:4,b:4,64+a+b:4); writeln(a+b+c:4,b+c:4,c:4); end.

桐梓县13475379556: 一颗二叉树有十个节点则至多有几个节点有2个子节点 freepascal语言 -
谭泳莲必:[答案] 思考:有几个子结点对应着该结点的度数就为几,所以可 设度为0的结点数为n0,度为1的结点数为n1,度为2的结点数为n2,由题意: n0+n1+n2=10 在二叉树中有:n0=n2+1; 所以有2*n2+n1=9;所以n1的值为奇数,最小的值为1 可知n2最大为4....

桐梓县13475379556: 求解free pascal题目: 计算m!末尾有多少个零.m!=1*2*3*4*5*...*m. m由键盘输入(用单层循环)
谭泳莲必: var n,i,sum,x:longint; begin read (n); for i:=1 to n do if i mod 5=0 then begin x:=i; repeat x:=x div 5; sum:=sum+1; until x mod 5&lt;&gt;0; end; writeln (sum); end. 哈,这个题目是淳朴的数学思想了. 2、4和5 能组成10,10后面能够有0;在1-1000里面能被5整除的最少,所以选5作为代表了

桐梓县13475379556: 求free pascal编程题目,请高手解答.急啊
谭泳莲必: var n,i,j:integer;begin readln(n); for i:=1 to n do begin for j:=1 to i do write('*'); writeln; end; for i:=n-1 downto 1 do begin for j:=1 to i do write('*'); writeln; end;end.

桐梓县13475379556: 求解 free pascal的题目... -
谭泳莲必: 首先你要发现一个规律: 2^3=3+5 两个数之和 3^3=7+9+11 三个数之和 4^3=13+15+17+19 四个数之和 ……N^3= N个数之和 这个规律显而易见,还有一个更重要的规律就是你要找一下N 和等号右边的数有什么关系吗? 先思考一会再看下面 当N为奇数时,最中间的那个数是N^2 当N为偶数时,最中间两个数是(N^2-1)和(N^2+1) 所以,就可以做出来了 关于实现:for循环从中间开始分别向前向后循环,就可得解 希望对LZ有帮助 这些都是我自己想出来的,望LZ采纳,谢谢

桐梓县13475379556: 解决两个FREE PASCAL 题目 -
谭泳莲必: 第一题:var x,y,k:integer; begin k:=0; for x:=1900 to 2000 do for y:=i to 2000 do begin if (x mod 3=1)and(x mod 4=2) and(x mod 5=3)and(x mod 6=4) then k:=1; if (k=1)and(y mod 3...

桐梓县13475379556: 在 Free Pascal 中编程 题目:输入一个三位数,个位与百位对调后输出.哪位可以教一教? -
谭泳莲必: var a,b,c,s:longint; begin readln(s); a:=s div 100; b:=s div 10 mod 10; c:=s mod 10; s:=c*100+10*b+a; writeln(s); readln; end.这个题很简单,就不做解释了.还有,楼主上面的程序错在 a:=INT(x/100);和b:=INT(y/10);还有c:=mod(x,10);,pascal里是不能这样的,一楼的X.Rabbit的程序有错误,是个位与百位对调,结果错误

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网