在一个宾馆里住这六个不同国籍的人,他们分别来自美国,德国,英国,法国,俄罗斯和意大利。他们的名字叫A,B,C,D,E,F。名字的顺序与上面的国籍不一定相互对应。
1.A和美国人是医生
2.E和俄罗斯人是教师
3.C和德国人是技师
4.B和F曾经当过兵,而德国人从未参过军
5.法国人比A年龄大,意大利人比C年龄大
6.B同美国人下周要去西安旅行,而C同法国人下周要去杭州度假
通过上述描述,判断A,B,C,D,E,F各是哪国人
分析可得下图
#include <stdio.h>
char *m[7] = {"","US","UK","FRANCE","GER","ITALY","EUSSIAN"};
int main()
{
int i;
int j;
int k;
int n;
int t;
int e;
int x;
int y;
int a[7][7];
char b;
for(i = 0 ; i < 7 ; i++)
{
for(j = 0 ; j < 7 ; j++)
{
a[i][j] = j;
}
}
for(i = 1 ; i< 7 ; i++)
{
a[0][i] = 1;
}
a[1][1] = a[2][1] = a[3][1] = a[5][1] = 0;
a[1][3] = a[2][3] = a[3][3] = 0;
a[1][4] = a[2][4] = a[3][4] = a[5][4] = a[6][4] = 0;
a[3][5] = 0;
a[1][6] = a[3][6] = a[5][6] = 0;
while(a[0][1] + a[0][2] + a[0][3] + a[0][4] + a[0][5] + a[0][6] > 0)
{
for(i = 1 ; i < 7 ; i++)
{
if(a[0][i])
{
for(e = 0,j = 1 ; j < 7 ; j++)
{
if(a[j][i])
{
x = j;
y = i;
e++;
}
}
if(e == 1)
{
for(t = 1 ; t < 7 ; t++)
{
if(t != i)
{
a[x][t] = 0;
}
}
a[0][y] = 0;
}
}
}
}
for(i = 1 ; i < 7 ; i++)
{
printf("%c is coming from : ",'A' - 1 + i);
for(j = 1 ; j< 7 ; j++)
{
if(a[i][j] != 0)
{
printf("%s. \n",m[a[i][j]]);
break;
}
}
}
return 0;
}