C语言 婚礼上的谎言

   问题: 

        3对情侣参加婚礼,3个新。郎分别为a、b、c,三个新郎分别为 x、y、z。有人想知道究竟谁和谁结婚,于是就问新人中的三位,得到如下提示:a说 他将和X结婚;x说她的未婚夫是c;c说她将和z 结婚。这人时候知道他们都在开玩笑,说的全是假话,那么究竟谁和谁结婚呐。


解决本题的算法思想:

             用a = 1 表示新郎a 和 新娘x 结婚,同理,如果新郎a 不与x 结婚则表示成 a!=1。根据题意可以得到以下表达式:

             a != 1;                      a说她将和x结婚

             c != 1;                      x说她的未婚夫是c

             c != 3;                      c说他将和z结婚

       题中的隐含条件,即3个新郎不能互为配偶,则有:a != b;  b != c; c != a;穷举所有可能的情况,通过上述表达式进行推理。如果假设的情况使上述表达式成立,则假设的情况就是正确的结果。

源代码:

#include<stdio.h>
 
int main()
{
    int a, b, c;
    for (a = 1; a <= 3; a++)              //穷举所有可能
    {
        for (b = 1; b <= 3; b++)
        {
            for (c = 1; c <= 3; c++)
            {
                if (a != 1 && c != 1 && c != 3 && a!= b&&b != c&&c != a ) //如果表达式为真,则输出结果
                {
                    printf("%c will merryto a\n", 'x' + a - 1);
                    printf("%c will merryto a\n", 'x' + b - 1);
                    printf("%c will merryto a\n", 'x' + c - 1);
                }
            }
        }
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值