C语言-婚礼上的谎言

问题:三对情侣参加婚礼,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;
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值