100c之54: 说谎族,诚实族和两面族
问题
两面族是岛上除了说谎族和诚实族外的新民族,他们的特点是说话真假交替。一句谎话接着一句真话或者一句真话接着一句谎话。但是第一句是真还是假难以讲清楚。 谜语博士遇到了三个人,他问左边的人:中间是什么族?左边的回答:诚实族。他问中间:你是什么民族?中间的回答:两面族。他又问右边:中间的人到底是什么民族?右边的回答: 说谎族。请问这三个到底是什么民族的。
分析
每个人都有三个状态。穷举加上约束条件就ok啦。
程序
1: /** 2: * @file 054c.c 3: * @author Chaolong Zhang <emacsun@163.com> 4: * @date Sun Jul 14 13:23:28 2013 5: * 6: * @brief 两面族是岛上除了说谎族和诚实族外的新民族,他们的特点是说话真假交替。一句谎话接着一句真话或者一句真话接着一句谎话。但是第一句是真还是假难以讲清楚。 7: * 谜语博士遇到了三个人,他问左边的人:中间是什么族?左边的回答:诚实族。他问中间:你是什么民族?中间的回答:两面族。他又问右边:中间的人到底是什么民族?右边的回答: 8: * 说谎族。请问这三个到底是什么民族的。 9: */ 10: 11: #include <stdio.h> 12: #define N 3 /// 0 stands for lying; 1 for being honest; 2 for double-dealer 13: 14: int main(int argc, char *argv[]) 15: { 16: int a,b,c; 17: 18: for (a=0; a < N; ++a){ 19: for (b=0; b < N; ++b){ 20: for (c=0; c < N; ++c){ 21: if ( ( ( a==0 )&&( b!=1 ) || ( a==1 )&&( b==1 ) || ( a==2 )) && 22: ( b!=1 ) && 23: ( ( c==0 )&&( b!=0 ) || ( c==1 )&&( b==0 ) || ( c==2 ))){ 24: printf ("%d,%d,%d\n",a,b,c); 25: } 26: } 27: } 28: } 29: return 0; 30: } 31:
结果
0,0,1 0,0,2 0,2,0 0,2,2 2,0,1 2,0,2 2,2,0 2,2,2
作者:emacsun
出处:http://www.cnblogs.com/chaolong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步