英国人,美国人问德国人年龄。给出了11种可能:35,36,39,42,45,46,51,55,58,61,62
德国人将10位告诉了英国人,将个位告诉了美国人。
英国人说:“我不知道德国人的年龄,但我认为美国人也不知道”
美国人说:“我原来不知道德国人的年龄,但是现在我知道了”
英国人说:“现在我也知道了”
请问德国人的年龄是多少
42 手动 对不对?
我觉得有3个答案吧,45,46,61
61
第一句是通过十位和个位不能判断,但是39,58可以判断,去掉三十几和五十几。
第二句是通过个位可以判断了,剩下45,46,61
第三句是通过十位可以判断了,所以是61
#include <stdio.h>
struct NumPool //数据池
{
int value; //数值
int num; //次数
};
NumPool X_numpool[12]; //记录10位
int X_maxpool_num = 0;
NumPool Y_numpool[12]; //记录个位
int Y_maxpool_num = 0;
void pushNumPush(int num); //只处理2位数
int GetX_Num(int num);
int GetY_Num(int num);
int main()
{
int a[15] = { 35,36,39,42,45,46,51,55,58,61,62 };
int num = 11;
int team[12][20]; //数据分组 十位相同为一组
int team_num = 0; //分组数量
for (int i = 0; i < num; i++)
{
pushNumPush(a[i]);
int j = 0;
for (j = 0; j < team_num; j++)
{
if (team[j][1] / 10 == a[i] / 10)
{
team[j][0] ++; //记录该组数量
team[j][team[j][0]] = a[i]; //增加成员
break;
}
}
if (j == team_num)
{
team[team_num][0] = 1;//初始化数量
team[team_num][1] = a[i];
team_num++; //增加组数
}
}
//第一轮帅选
for (int i = 0; i < team_num; i++)
{
for (int j = 1; j <= team[i][0]; j++)
{
if (GetY_Num(team[i][j]) <= 1)
{
team[i][0] = -1; //当前组全部剔除
break;
}
}
}
//第二轮帅选
X_maxpool_num = 0;
Y_maxpool_num = 0; //初始化数据池
for (int i = 0; i < team_num; i++)
{
for (int j = 1; j <= team[i][0]; j++)
{
pushNumPush(team[i][j]);
}
}
for (int i = 0; i < team_num; i++)
{
for (int j = 1; j <= team[i][0]; j++)
{
if (GetY_Num(team[i][j]) > 1)
{
team[i][j] = -1; //删除不符合项
}
}
}
int result[10];
int result_num = 0;
///第3轮帅选
for (int i = 0; i < team_num; i++)
{
int num = team[i][0];
for (int j = 1; j <= team[i][0]; j++)
{
int key;
if (team[i][j] == -1)
{
num--;
//result[result_num++]
}
else
{
key = team[i][j];
}
if (num == 1) {
result[result_num] = key;
result_num++;
}
}
}
//打印结果
for (int i = 0; i < result_num; i++)
{
printf("%d\n", result[i]);
}
}
int GetX_Num(int num)
{
int x = num / 10;
for (int i = 0; i < X_maxpool_num; i++)
{
if (x == X_numpool[i].value)
{
return X_numpool[i].num;
}
}
return 0;
}
int GetY_Num(int num)
{
int y = num % 10;
for (int i = 0; i < Y_maxpool_num; i++)
{
if (y == Y_numpool[i].value)
{
return Y_numpool[i].num;
}
}
return 0;
}
void pushNumPush(int num)
{
int x = num / 10; //十位
int y = num % 10; //个位
int i;
for (i = 0; i < X_maxpool_num; i++)
{
if (X_numpool[i].value == x)
{
X_numpool[i].num += 1;
break;
}
}
if (i == X_maxpool_num)
{
X_numpool[X_maxpool_num].value = x;
X_numpool[X_maxpool_num].num = 1;
X_maxpool_num++;
}
for ( i = 0; i < Y_maxpool_num; i++)
{
if (y == Y_numpool[i].value)
{
Y_numpool[i].num++;
break;
}
}
if (i == Y_maxpool_num)
{
Y_numpool[Y_maxpool_num].value = y;
Y_numpool[Y_maxpool_num].num = 1;
Y_maxpool_num++;
}
}
结果61