读书人

请求高手帮小弟我分析一道程序.

发布时间: 2012-02-08 19:52:21 作者: rapoo

请求高手帮我分析一道程序.
题目:
谜语博士遇到四个人,知道他们可能是来自诚实族或是说谎族的,为了调查这四个人是什么族的,博士照例进行询问:"你们是什么族的?"
   第一个人说:"我们四个人中都是说谎族的."
   第二个人说:"我们四个人之中只有一人是说谎族的."
   第三个人说:"我们四个人中有两个是说谎族的."
   第四个人说:"我是说谎族的."
问自称是"诚实族"的第四个人是否真是诚实族的?
 
程序:

#include <stdio.h>
void main()
{
int a,b,c,d;
for(a=0;a <2;a++)
for(b=0;b <2;b++)
for(c=0;c <2;c++)
for(d=0;d <2;d++)
if(a+b+c+d==0&&a+b+c+d==3&&a+b+c+d==2)
{
printf( "The first pelpeo is %s\n ", a? "honest " : "lier ");
printf( "The second pelpeo is %s\n ", b? "honest " : "lier ");
printf( "The thirst pelpeo is %s\n ", c? "honest " : "lier ");
}
else if(d==1&&a+b+c+d==1)
printf( "The forth pelpeo is %s\n ", "honest ");


}
可以帮我分析一下这道程序吗?或者给出你的见解!
在这里谢谢了!!!

[解决办法]
这段代码是有问题的了。
if(a+b+c+d==0&&a+b+c+d==3&&a+b+c+d==2) 这个条件怎么可能符合呢
[解决办法]
我把条件改成
if(((a+b+c+d==0&&a==1)||(a+b+c+d!=0&&a==0))&&((b==1&&a+b+c+d==3)||(b==0&&a+b+c+d!=3))&&((c==1&&a+b+c+d==2)||(c==0&&a+b+c+d!=2)))
如果a是说的是对的,那么a是诚实的.以此类推,而且你的题目都写错了。第四个人是说:"我是诚实族的吧".
[解决办法]
呵呵,程序判断下面的也改了。
#include <stdio.h>
void main()
{
int a,b,c,d;
for(a=0;a <2;a++)
for(b=0;b <2;b++)
for(c=0;c <2;c++)
for(d=0;d <2;d++)
if(((a+b+c+d==0&&a==1)||(a+b+c+d!=0&&a==0))&&((b==1&&a+b+c+d==3)||(b==0&&a+b+c+d!=3))&&((c==1&&a+b+c+d==2)||(c==0&&a+b+c+d!=2)))
{
printf( "The first pelpeo is %s\n ", a? "honest " : "lier ");
printf( "The second pelpeo is %s\n ", b? "honest " : "lier ");
printf( "The thirst pelpeo is %s\n ", c? "honest " : "lier ");
printf( "The forth people is %s\n ", d? "honest ": "lier ");
printf( "\n ");
}
}
[解决办法]
不明白你是什么意思。。。
[解决办法]
老大,那两种结果中第四个人是诚实族的啊。.这点都没想明白..我运行的结果是1.第四个人是诚实的.2.第三和四个人都是诚实的.你再想想看吧..

读书人网 >C语言

热点推荐