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结婚
网友评论