这道题怎么填?

  某市发生了一起盗窃案,警察抓了三名嫌疑人,分别审讯时,甲说:“这件事不是我做的。”乙说:“这件事是甲做的。”丙说:“这件事是甲和乙做的。”经过测谎,三人中只有一人说了真话,指纹鉴定作案人有两人。问:谁是小偷?  本来让孩子去问了数学老师,可老师说的也和标准答案不一样,自己在家只能分析出丙是其中之一,还有一个人虽然知道答案,但是不知道是怎么分析推理出来的。  因孩子一直追问,我实在答不出来,只好来请教大神,最好能说出分析过程。谢谢!
楼主发言:9次 发图:0张 | 更多
  先分析甲和乙,甲说:不是甲(我),乙说是甲,因为只有一个说了真话,所以甲乙两人肯定至少有一个说谎,作案人有两个,而乙说是甲,所以可以肯定乙说谎了,乙说是甲,但他说谎了,所以不是甲,丙说是甲和乙,则丙也说谎了,故乙和丙是小偷。  --------------------------------  不知道对不对。
  先分析甲和乙,甲说:不是甲(我),乙说是甲,因为只有一个说了真话,所以甲乙两人肯定至少有一个说谎,作案人有两个,而乙说是甲,所以可以肯定乙说谎了,乙说是甲,但他说谎了,所以不是甲,丙说是甲和乙,则丙也说谎了,故乙和丙是小偷。  --------------------------------  @等待中16-04-19 15:32:00  不知道对不对。  -----------------------------  先谢谢您。标准答案确实是乙和丙。  但是为什么能肯定乙说是甲,所以乙说谎?就是这里不明白,为什么不是甲说谎,而乙说的是实话呢?  孩子就是不明白这点。
  但是为什么能肯定乙说是甲,所以乙说谎?就是这里不明白,为什么不是甲说谎,而乙说的是实话呢?  ----------------------  指纹鉴定作案人有两人啊,大哥,乙说是甲,一个人,作案是两人,所以乙在说谎。而甲说不是甲(我),
  @u_6-04-19 15:56:00  你们想多了吧,只有一个不是贼,所以先用甲不是贼去套,一套就中啦。  -----------------------------  也对,嘻嘻
  有点明白了,因为丙肯定是假话,所以甲说自己没做,就可以成立。乙说是甲一人做的就是说谎了……  是这样吗?
  这个题好像有点问题,作案是2人,乙说是甲(1个人),是不是可以直接认定为假话?乙认定为假话,那就不能说甲乙的话是相反的,必有1真了。
  1、甲说:不是甲;乙说:是甲。甲乙二人的命题互相矛盾。  2、三人只有一人说真话  推论1:甲乙二人必有一假,也必有一真;  推论2:丙的话必为假话(三人中只有一真)  所以,小偷是丙。
  题目有一处不够严谨:  丙说:“这件事是甲和乙做的。”  改为:丙说:“这件事是甲或乙做的。”才严谨。
  这道题是一个变形。  最初的套路就是丙说“这件事是甲或乙做的。”那么,丙说假话,小偷就是丙。  这已经成了套路,所以求变。  变成“作案人是两个”。  深究一下的话,确实变出一点不太严谨来:  如果作案人是甲和丙,那么,乙说“这件事是甲做的”这是不是假话,确实有分歧。  分歧在于:  如果仅仅作形式逻辑的符号推理,那么,乙的话可以认为是“作案人是甲一人”,  但在现实中,乙这样说未必是说假话,他可能仅仅知道甲做案而并不知道丙也做案,并不知道作案人是两个。  这就是产生分歧的原因。
  此类题一般有两种标准解法。  一种解法:三句话,假设某句为真,然后看另两句是否为假,判断是否满足条件。  一种解法:假设作案人的三种情况(甲乙、甲丙、乙丙),再来看是否满足一真两假的说话条件。  此题有瑕疵。瑕疵在:当作案者是甲丙时,乙说“这件事是甲做的。”,这算真话还是假话?  所以,按无瑕疵的逻辑推理,根据条件,两人作案,而乙说“这件事是甲做的”,便可以认为这是说谎,然后找出满足条件的结论:乙丙作案。这是最严谨且无歧义的。甲丙作案也能用日常语言认为是一真两假,但是有理解瑕疵。  现在题量那么大,有瑕疵的题目,肯定不少。告诉孩子,需要选择最没有过程歧义的结果,来作答。
  多谢楼上各位大神了!浅显易懂!拜服!
<span class="count" title="万
<span class="count" title="万
请遵守言论规则,不得违反国家法律法规回复(Ctrl+Enter)这道题怎么填?
半面妆qqPX2
1.4 2.6 3.6 4.4 5.4 6.等腰三角形
为您推荐:
其他类似问题
题呢????
4. salad 5. Duck
7. Don't add,any
说好的图片呢忘了<img class="ikqb_img" src="http://b./zhidao/wh%3D600%2C800/sign=f8fee8afca177f3eff17ff/a2cc7cd98de16bb0e7bec54e7979b.jpg" esrc="http://b.hiphotos.baid...
扫描下载二维码推荐到广播
421668 人聚集在这个小组
(maranda92)
(狗血姑娘)
第三方登录:精诚所至 金石为开
欢迎加入我们,一同切磋技术。 &
用户名: &&&
密 码: &
共有 910 人关注过本帖
标题:求大神指点,这道题怎么做啊
等 级:新手上路
帖 子:10
结帖率:33.33%
&&已结贴√
&&问题点数:20&&回复次数:9&&&
求大神指点,这道题怎么做啊
九数组分数
1,2,3...9 这九个数字组成一个分数,其值恰好为1/3,如何组法?
下面的程序实现了该功能,请填写划线部分缺失的代码。
#include &stdio.h&
void test(int x[])
&&& int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3];
&&& int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8];
&&& if(a*3==b) printf(&%d / %d\n&, a, b);
void f(int x[], int k)
&&& int i,t;
&&& if(k&=9){
&&&&&&&&test(x);
&&& for(i=k; i&9; i++){
&&&&&&&&{t=x[k]; x[k]=x[i]; x[i]=t;}&&
&&&&&&&&f(x,k+1);
&&&&&&&&_____________________________________________ // 填空处
int main()
&&& int x[] = {1,2,3,4,5,6,7,8,9};
&&& f(x,0);&&&
&&& return 0;
注意:只填写缺少的内容,不要书写任何题面已有代码或说明性文字。
搜索更多相关主题的帖子:
等 级:黑侠
帖 子:107
专家分:534
这是一个典型的全排列组合算法,递归后将交换的数据还原即可,复制递归前的那行代码即可,如果非要不一样,可把k、i对调,结果一样。
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
若是用排列组合的方法,如题目中的方法,确实是难理解。我想出来一个好理解但是比较死的办法。设N为分子,M为分母,且M=N*3,由于有9个数字,所以N只能是四位数,M是五位数。试想N的三倍是五位数,且N的四个数字不能重复,所以N最小是3412,同理N最大是9876。在这个范围内穷举每一个数,只要M*10000+N,即9个数字组成的数没有相同的数字而且没有数字0即可。下面是我的算法。
程序代码:#include &stdio.h&
#include &stdlib.h&
#include &stdbool.h&
int main()
&&& bool isSameNumberExistsInTwoNumbers(int m,int n);
&&& int N,M;
&&& for(N=<font color=#2;N&=<font color=#6;N++)
&&&&&&&&M=N*<font color=#;
&&&&&&&&if(isSameNumberExistsInTwoNumbers(M,N))
&&&&&&&&&&&&printf(&%d/%d=1/3\n&,N,M);
&&& return <font color=#;
bool isSameNumberExistsInTwoNumbers(int m,int n)
&&& int i,j,total=m*<font color=#00+n;
&&& char numChar[<font color=#];&&//注意长度10是因为末尾要加一个字符串结束标志'\0'
&&& itoa(total,numChar,<font color=#);&&//将这个9位数转换成字符串
&&& for(i=<font color=#;i&<font color=#;i++)
&&&&&&&&for(j=i+<font color=#;j&<font color=#;j++)
&&&&&&&&&&&&//比较是否有相同的数字或者有0
&&&&&&&&&&&&if(numChar[i]==numChar[j]||numChar[i]=='<font color=#')&&return false;
&&& if(numChar[<font color=#]=='<font color=#')&&return false;&&//检查第9个,上面没有检查到
&&& return true;
下面是程序的运行结果,大家看下对不对。
附件: 您没有浏览附件的权限,请
&&&唯实惟新 至诚致志
等 级:黑侠
帖 子:107
专家分:534
可行,不过楼主题意是帮他填空。另判断是否重复还有更高效的算法,不需要转换为字符串,如下:
bool isSameNumberExistsInTwoNumbers(int m,int n)
&&& int i,total=m*10000+n;
&&& char numChar[10]={0};&&//注意长度10是因为末尾要加一个字符串结束标志'\0'
&&& for(;total/=10)
&&&&&&&&&numChar[total%10]++;
&&& for(i=9;i;i--)
&&&&&&&&&if(numChar[i]!=1)
等 级:版主
威 望:189
帖 子:4415
专家分:23539
回复 4楼 拉链
bool isSameNumberExistsInTwoNumbers(int m,int n)
&&& unsigned mark = 0;
&&& for( n=n*100000+m; n!=0; n/=10 )
&&&&&&&&mark |= 1u&&(n%10);
&&& return mark==0x3FE;
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
回复 5楼 rjsp
蒙了,请问位移运算怎么做到的。
&&&唯实惟新 至诚致志
等 级:版主
威 望:189
帖 子:4415
专家分:23539
回复 6楼 qq
遇到1就将第一bit设为1
遇到2就将第二bit设为1
遇到3就将第三bit设为1
遇到9就将第九bit设为1
最后看一下是不是二进制的
等 级:黑侠
帖 子:107
专家分:534
回复 5楼 rjsp
回复5楼:就是把数组变成位。得到一个数的各位数据后,把1左移到该位并与mark或,如果9个数不同,则最终的数应该是二进制11 fe。
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
回复 8楼 拉链
咯,在纸上比划了半天,才明白怎么回事,不得不说,此方法确实精妙无比。
&&&唯实惟新 至诚致志
版权所有,并保留所有权利。
Powered by , Processed in 0.022341 second(s), 9 queries.
Copyright&, BCCN.NET, All Rights Reserved

我要回帖

更多关于 骆驼祥子填空题100道 的文章

 

随机推荐