using System;
using System.Collections.Generic;
using System.Text;
namespace Logic_zhongJi
{
class Program
{
static void Main(string[] args)
{
/*
* 测试 1819 */
Twins();
/* 输出结果:
C的妹妹是a
B的妹妹是b
D的妹妹是c
A的妹妹是d
*/
}
#region 2. 四对双胞胎。
/*
* 2. 四对双胞胎。
在老北京的一个胡同的大杂院里,住着4户人家,巧合的是每家都有一对双胞胎女孩。
* 这四对双胞胎中,姐姐分别是ABCD,妹妹分别是abcd。
一天,一对外国游人夫妇来到这个大杂院里,看到她们8个,忍不住问:“你们谁和谁是一家的啊?”
B说:“C的妹妹是d。”
C说:“D的妹妹不是c。”
A说:“B的妹妹不是a。”
D说:“他们三个人中只有d的姐姐说的是事实。”
如果D的话是真话,你能猜出谁和谁是双胞胎吗?
*/
static void Twins()
{
char[] sister ={ 'A','B','C','D'};
/* a,b,c,d 妹妹从左至右战成一排,等待姐姐来配对,对应的姐姐分别是
* sister[i],sister[j],sister[k],sister[m]
*
*/
//其实可以不用声明数组,可以直接用字符型计数器循环从A-D;
for (int i = 0; i < sister.Length; i++)
{
for (int j = 0; j < sister.Length; j++)
{
if (i!=j)
{
for (int k = 0; k < sister.Length; k++)
{
if (i!=k&&j!=k)
{
for (int m = 0; m < sister.Length; m++)
{
if (m!=i&&m!=j&&m!=k)
{
//姐姐妹妹配好对后,根据题意得知:
int x = Bool(sister[m]=='C') + Bool(sister[k]!='D') + Bool(sister[i]!='B');
//既然A,B,C中三人有1人说了真话,那么x=1;
if (x==1)
{
//如果d的姐姐是A,
if (sister[m] == 'A' && sister[i] != 'B')
{
Console.WriteLine(sister[i]+"的妹妹是a");
Console.WriteLine(sister[j] + "的妹妹是b");
Console.WriteLine(sister[k] + "的妹妹是c");
Console.WriteLine(sister[m] + "的妹妹是d");
}
//如果d的姐姐,即sister[m]是C,
else if (sister[m] == 'C' && sister[k] != 'D')
{
Console.WriteLine(sister[i] + "的妹妹是a");
Console.WriteLine(sister[j] + "的妹妹是b");
Console.WriteLine(sister[k] + "的妹妹是c");
Console.WriteLine(sister[m] + "的妹妹是d");
}
//如果d的姐姐是B,
else if (sister[m] == 'B' && sister[m] == 'C')
{
Console.WriteLine(sister[i] + "的妹妹是a");
Console.WriteLine(sister[j] + "的妹妹是b");
Console.WriteLine(sister[k] + "的妹妹是c");
Console.WriteLine(sister[m] + "的妹妹是d");
}
//如果d的姐姐是D的话,自相矛盾了!
}
}
}
}
}
}
}
}
}
#endregion
//bool值为true时,返回1,为false时,返回0。当然,在c语言里,bool值与int值可以直接转换!
static int Bool(bool a)
{
if (a)
{
return 1;
}
else
{
return 0;
}
}
}
}