当下,悬疑推理成为了一种流行趋势,同样,游戏们都抓住时机,讲推理融入游戏。给大家介绍几个微信里玩推理游戏的场所,大家约上二三好友,来一局推理游戏,实在是颇为快乐。
一、全民侦探推理游戏。
简介:《明星大侦探》同款真人角色扮演游戏,快拉上小伙伴们走入一起起神秘、凶险的案件之中,挖掘线索、查明真相,找出那个隐匿在你们之中的真凶。 *** 作简单,易上手。剧本也挺多的。值得推荐。
二、再见吧渣男。再见吧渣男这款游戏非常的有趣,进入游戏后玩家需要找出渣男出轨的证据,提交正确的线索即可过关。这款为微信小程序,大家可以自行搜索查阅。
三、回到8090。
怀念旧时光,憧憬新生活,回到8090!怀旧治愈的游戏画风,复古的老物件,满满的8090年代感的生活气息。在《回到8090》微信小游戏中有一个大家庭,我们所扮演的是这个家庭中其中一个儿子,这个儿子还有爷爷奶奶爸爸妈妈哥哥妹妹。在游戏中我们需要与家庭中的每个成员对话,帮助各位家庭成员来完成任务硬的零花钱。除了日常的搜集零花钱废品玩法以外,在《回到8090》微信小游戏中还可以学习、出去玩、打开记忆和进行记忆拼图哦!打开微信小程序加载完毕就可以玩啦~
四、最强擦一擦。
这是一款益智推理类全民擦图竞答游戏,游戏过程中玩家通过尽可能少的擦图来找到关于图片信息的正确答案,题目范围将涵盖科学、文化、综艺、艺术等各个领域。手机打开微信小游戏“最强擦一擦”,授权后,点击屏幕,就可以进入游戏模式。
你的数据可能有点问题,第七个点是:3 3 3
SAM
SANDY
SUE
SAM: I am not guity. Am I???
SUE: SANDY is guity.
SANDY: SUE is guity.
其中guilty这个单词拼错了,拼成了guity,所以三个句子都是无效的,所以会输出Cannot Determine。
不是找不到,是三个人都有可能,你仔细看看数据是不是拼写错了。
输出Cannot Determine是当可能的人数大于1时,而Impossible是没有一个人可能是罪犯。
而这个数据的三个语句本身是无效的,显然不是Impossible,而是Cannot Determine。
实在不行你可以用标程试试,把拼写改对了答案显然是SAM,问题就是拼写错了导致句子无效。
标准程序如下,注意输入的格式:
program NOIP2003_2_Logic
const
maxm=20
dow:array[1..7]of string=('Sunday.','Monday.','Tuesday.','Wednesday.',
'Thursday.','Friday.','Saturday.')
var
i,j,k,weekday,m,n,p,p1,p2,p3,index,resolution,total1,total2:byte
name:array[1..maxm]of string{存放人名}
witness10,witness20:array[1..100]of byte{存放说话人的序号,分为两类,前者存放不含星期的证词的说话人的序号,后者存放只含星期的证词的说话人的序号}
witness1,witness2:array[1..100]of string{存放证词,分为两类,第一类是不含星期的证词,第二类是只含星期的证词}
name0,temp,temp0,temp1,temp2:string
truth,truth0:array[1..maxm]of byte{存放诚信记录}
f1,f2:textfn1,fn2,fileNo:string
flag:boolean
begin
write('Input fileNo:')readln(fileNo)
fn1:='logic.in'+fileNofn2:='logic.ou'+fileNo
assign(f1,fn1)reset(f1)assign(f2,fn2)rewrite(f2)
readln(f1,m,n,p)
for i:=1 to m do readln(f1,name[i])
total1:=0total2:=0
for i:=1 to p do begin{对证词预处理}
readln(f1,temp)
index:=pos(': ',temp)
temp1:=copy(temp,1,index-1){取得说话人姓名}
temp2:=copy(temp,index+2,length(temp)-index-1){取得证词}
if (temp2='I am guilty.') or (temp2='I am not guilty.') then
for j:=1 to m do
if name[j]=temp1 then begin
inc(total1){total1表示第一类证词的总数}
witness10[total1]:=j{记下第一类第total1条证词的说话人的序号}
witness1[total1]:=temp2{记下第一类第total1条证词}
break
end
if (pos(' is guilty.',temp2)>0) or (pos(' is not guilty.',temp2)>0) then begin
temp0:=copy(temp2,1,pos(' is ',temp2)-1){取得证词的叙述对象(主语)}
flag:=false
for k:=1 to m do
if temp0=name[k] then begin
flag:=true
break
end
if flag then{如果证词的叙述对象(主语)确实存在}
for j:=1 to m do
if name[j]=temp1 then begin{记入到第一类证词中}
inc(total1)
witness10[total1]:=j
witness1[total1]:=temp2
break
end
end
flag:=false
for j:=1 to 7 do
if temp2='Today is '+ dow[j] then begin
flag:=true
break
end
if flag then{如果证词是关于星期的判断}
for j:=1 to m do
if name[j]=temp1 then begin{记入到第二类证词中}
inc(total2){total2表示第二类证词的总数}
witness20[total2]:=j{记下第二类第total2条证词的说话人的序号}
witness2[total2]:=temp2{记下第二类第total2条证词}
break
end
end
close(f1)
resolution:=0{resolution表示解的个数 }
for i:=1 to m do begin{穷举,第i个人为罪犯}
if resolution>1 then break{如果解的个数多于1个,则跳出循环}
fillchar(truth,sizeof(truth),0){诚信记录赋初值为0,表示此人尚无有效证词}
for j:=1 to total1 do begin{逐条处理第一类证词}
if witness1[j]='I am guilty.' then begin{如果证词为I am guilty.}
if i=witness10[j] then{如果说话人就是罪犯,则本证词为真}
case truth[i] of
0:truth[i]:=1{如果此人的诚信记录为0,则此人说真话(记为1)}
2:truth[i]:=3{如果此人的诚信记录为2(即以前说假话),则此人自相矛盾(记为3)}
end
else{如果说话人不是罪犯,则本证词为假}
case truth[witness10[j]] of
0:truth[witness10[j]]:=2{如果此人的诚信记录为0,则此人说假话(记为2)}
1:truth[witness10[j]]:=3{如果此人的诚信记录为1(即以前说真话),则此人自相矛盾(记为3)}
end
end
if witness1[j]='I am not guilty.' then begin{如果证词为I am not guilty.}
if i=witness10[j] then{如果说话人是罪犯,则本证词为假}
case truth[i] of
0:truth[i]:=2
1:truth[i]:=3
end
else{如果说话人不是罪犯,则本证词为真}
case truth[witness10[j]] of
0:truth[witness10[j]]:=1
2:truth[witness10[j]]:=3
end
end
if (pos(' is guilty.',witness1[j])>0) then begin{如果证词含有is guilty. }
temp:=copy(witness1[j],1,pos(' is guilty.',witness1[j])-1){取得证词的主语}
if name[i]=temp then{如果证词的主语是罪犯,则本证词为真}
case truth[witness10[j]] of
0:truth[witness10[j]]:=1
2:truth[witness10[j]]:=3
end
else{如果证词的主语不是罪犯,则本证词为假}
case truth[witness10[j]] of
0:truth[witness10[j]]:=2
1:truth[witness10[j]]:=3
end
end
if (pos(' is not guilty.',witness1[j])>0) then begin{如果证词含有is not guilty. }
temp:=copy(witness1[j],1,pos(' is not guilty.',witness1[j])-1){取得证词的主语}
if name[i]=temp then{如果证词的主语是罪犯,则本证词为假}
case truth[witness10[j]] of
0:truth[witness10[j]]:=2
1:truth[witness10[j]]:=3
end
else{如果证词的主语不是罪犯,则本证词为真}
case truth[witness10[j]] of
0:truth[witness10[j]]:=1
2:truth[witness10[j]]:=3
end
end
end{第一类证词全部处理完毕}
if total2>0 then begin{如果有第二类证词存在,处理第二类证词}
for k:=1 to m do truth0[k]:=truth[k]{记下第一类证词全部处理完毕后的诚信记录}
for weekday:=1 to 7 do begin{穷举,今天是星期日,星期一直到星期六}
for k:=1 to m do truth[k]:=truth0[k]{诚信记录还原为第一类证词全部处理完毕后的诚信记录}
for j:=1 to total2 do{逐条处理第二类证词}
if pos(dow[weekday],witness2[j])>0 then{如果证词中含有当前穷举的星期值,则本证词为真}
case truth[witness20[j]] of
0:truth[witness20[j]]:=1
2:truth[witness20[j]]:=3
end
else{如果证词中不含有当前穷举的星期值,则本证词为假}
case truth[witness20[j]] of
0:truth[witness20[j]]:=2
1:truth[witness20[j]]:=3
end
p1:=0p2:=0p3:=0
for k:=1 to m do if truth[k]=1 then inc(p1){p1表示始终说真话的人的总数}
for k:=1 to m do if truth[k]=2 then inc(p2){p2表示始终说假话的人的总数}
for k:=1 to m do if truth[k]=3 then inc(p3){p3表示说过自相矛盾的话的人的总数}
if (p1<=m-n) and (p2<=n) and (p3=0) then begin{如果说真话的人的总数小于等于m-n且说假话的人的总数小于等于n且没有人说过自相矛盾的话,那么当前罪犯i就是本题的一个解}
name0:=name[i]{记下罪犯的姓名}
inc(resolution){解的个数增1}
break{退出星期的穷举}
end
end{星期的穷举完毕}
end{第二类证词处理完毕}
p1:=0p2:=0p3:=0
for k:=1 to m do if truth[k]=1 then inc(p1)
for k:=1 to m do if truth[k]=2 then inc(p2)
for k:=1 to m do if truth[k]=3 then inc(p3)
if (p1<=m-n) and (p2<=n) and (p3=0) and (name0<>name[i]) then begin{为避免重复计解,此处多加了一个条件: name0<>name[i]}
name0:=name[i]
inc(resolution)
end
end
if resolution=1 then writeln(f2,name0){如果只有一个解,则输出罪犯姓名}
if resolution=0 then writeln(f2,'Impossible'){如果无解,则输出Impossible}
if resolution>1 then writeln(f2,'Cannot Determine'){如果有多个可能解,则输出Cannot Determine }
close(f2)
end.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)