C语言-婚礼上的谎言

来源:互联网 发布:厦门淘宝运营培训 编辑:程序博客网 时间:2024/05/01 13:33

问题:三对情侣参加婚礼,3个新郎abc3个新娘xyz,有人想知道究竟谁和谁结婚,于是就问新人中的三位,得到如下提示:a说他将和x结婚;x说他的未婚夫是cc说他将和z结婚。这人事后知道他们都在开玩笑,说的全是假话,那么究竟谁与谁结婚呢?

思路:用“a=1表示新郎a和新娘x结婚,同理,如果新郎a不与新娘x结婚则写成“a!=1,即x,y,z使用123表示,根据题意可以得到如下的表达式:

 

a!=1 a不与x结婚

c!=1 c不与x结婚

c!=3 c不与z结婚

 

其实根据上面3个表达式,我们就可以进行推理结果了:

 

c不与x,z结婚,那么肯定是和y结婚,所以c=2

a不与x结婚,那么肯定是与z结婚,所以a=3

最后剩下的肯定是bx结婚,即b=1


那么我们如何使用程序表达呢?是想,对于新郎而言,每一个人都可能与三位新娘中的任意一位结婚,所以我们需要根据事先已知条件遍历所有的情况,得到最终结果,但是还需要注意一个隐含的条件,那就是,3个新郎不能够互为配偶,即a!=bb!ca!=c


具体代码实现:

int main(int argc, const char * argv[]) {        int a,b,c;    for (a = 1; a <= 3; a++) { //穷举a的所有可能性        for (b = 1; b <= 3; b++) { //穷举b的所有可能性            for (c = 1; c <= 3; c++) { //穷举c的所有可能性                if (a != 1 && c != 1 && c != 3 && a !=b && b != c && a != c) {                     //如果表达式为真输出结果,否则继续下次循环                     printf("%c 将嫁给 a\n",'x' + a - 1);                     printf("%c 将嫁给 b\n",'x' + b - 1);                     printf("%c 将嫁给 c\n",'x' + c - 1);                }            }        }    }        /*     输出结果:     z 将嫁给 a     x 将嫁给 b     y 将嫁给 c          printf("%c 将嫁给 a\n",'x' + a - 1); 函数解释:%c表示输出一个字符,'x' + a - 1表示字符x加上某个数值,其结果会得到另外一个字符,这里涉及到ASCII值,每一个字母都对应一个值。所以在计算之后会得到对应的x,y,z.可以看下表:     */        return 0;}



0 0
原创粉丝点击