请选择 进入手机版 | 继续访问电脑版

智少年IT小达人_演武台

 找回密码
 立即注册
查看: 4353|回复: 6

趣味算法: 婚礼上的谎言 -- 穷举法

[复制链接]
发表于 2015-7-2 17:08:59 | 显示全部楼层 |阅读模式

    三对情侣参加婚礼,三个新郎为A,B,C,三个新娘为X,Y,Z,有人想知道究竟谁和谁结婚,于是就问新人中的三位,得到如下的提示:A说他将和X结婚;X说她的未婚夫是C;C说他将和Z结婚。这人事后知道他们在开玩笑,说的全是假话,那么究竟谁与谁结婚呢?
    我们将A,B,C用数字1,2,3表示,用“X=1”表示新娘X和新郎A结婚,如果新娘X不和新郎A结婚,那么写成X!=1。用这种方法,根据新人的叙述得到如下的表达式:
X!=1 A不与X结婚
X!=3 C不与X结婚
Z!=3 C不与Z结婚
    题H还隐含着的一个条件是:三个新娘不能互为配偶,则有:
X!=Y且X!=Z且Y!=Z
    穷举所有可能的情形,代入上述表达式进行推理运算。如果假设的情况使上述表达式的结果为真,假设的情况就是正确的结果。    代码如下:
#include<stdio.h>
main()
{
    int x,y,z;
    for(x=1;y<=3;x++)
        for(y=1;y<=3;y++)
            for(z=1;z<=3;z++)
                if(x!=1&&x!=3&&z!=3&&x!=y&&x!=z&&y!=z)
                {   printf("X will marry to %c.\n",''A''+x-1);
                    printf("Y will marry to %c.\n",''A''+y-1);
                    printf("Z will marry to %c.\n",''A''+z-1);
                }
}
运行结果:
X will marry to B
Y will marry to C
Z will marry to A
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|智少年 ( 粤ICP备15046784号

GMT+8, 2022-10-1 10:51 , Processed in 0.114575 second(s), 18 queries .

© 2015-2018 深圳智少年教育咨询有限公司

快速回复 返回顶部 返回列表