新郎和新娘

2021-12-07  本文已影响0人  一路向后

1.问题描述

有3对情侣结婚,假设3个新郎为A,B,C,3个新娘为X,Y,Z。有参加婚礼的人搞不清楚谁和谁结婚,所以去询问了这六位新人中的3位,得到的回答如下:新郎A说他要和新娘X结婚;新娘X说她的未婚夫是新郎C;而新郎C说他要和新娘Z结婚。听到这样的回答后,提问者知道他们都是在开玩笑,说的都是假话,但他仍搞不清楚谁和谁结婚,现在请编程求出哪位新郎和哪位新娘结婚。

2.源码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*是否满足条件*/
short isMatch(int a, int b, int c)
{
    if(a == 0 || c == 0 || c == 2)
    {
        return 0;
    }

    if(a == b || a == c || b == c)
    {
        return 0;
    }

    return 1;
}

int main()
{
    char groom[3] = {'A', 'B', 'C'};    /*新郎A, B, C*/
    char bride[3] = {'X', 'Y', 'Z'};    /*新娘X, Y, Z*/
    int gb[3] = {0, 0, 0};
    int gc[3] = {0, 0, 0};
    int i, j = 0;

    for(i=0; i<27; i++)
    {
        gb[0] = i % 3;
        gb[1] = (i / 3) % 3;
        gb[2] = i / 9;

        if(isMatch(gb[0], gb[1], gb[2]))
        {
            gc[0] = gb[0];
            gc[1] = gb[1];
            gc[2] = gb[2];

            j++;
        }
    }

    printf("probability = %d\n", j);

    for(i=0; i<3; i++)
    {
        printf("新郎%c和新娘%c结婚\n", groom[i], bride[gc[i]]);
    }

    return 0;
}

3.编译源码

$ gcc -o test test.c -std=c89

4.运行及其结果

$ ./test
probability = 1
新郎A和新娘Z结婚
新郎B和新娘X结婚
新郎C和新娘Y结婚
上一篇 下一篇

猜你喜欢

热点阅读