C/C++ code#include
char *country[7]={" ","U.S","U.K","FRANCE","GER","ITALI","EUSSIAN"}; /*国名*/
int main()
{
int array[7][7],i,j,t,e,x,y;
for(i=0;i<7;i++) /*初始化条件矩阵*/
for(j=0;j<7;j++) /*行为人,列为国家,元素的值表示某人是该国人*/
array[i][j]=j;
for(i=1;i<7;i++) /*条件矩阵每一列的第0号元素作为该列数据处理的标记*/
array[0][i]=1; /*标记该列尚未处理*/
array[1][1]=array[2][1]=array[3][1]=array[5][1]=0; /*输入条件矩阵中的各种条件*/
array[1][3]=array[2][3]=array[3][3]=0; /*0表示不是该国的人*/
array[1][4]=array[2][4]=array[3][4]=array[5][4]=array[6][4]=0;
array[3][5]=0;
array[1][6]=array[3][6]=array[5][6]=0;
while(array[0][1]+array[0][2]+array[0][3]+array[0][4]+array[0][5]+array[0][6]>0)
{ /*当所有六列均处理完毕后退出循环*/
for(i=1;i<7;i++) /*i:列坐标*/
if(array[0][i]) /*若该列尚未处理,则进行处理*/
{
for(e=0,j=1;j<7;j++) /*j:行坐标 e:该列中非0元素计数器*/
if(array[j][i])
{
x=j;
y=i;
e++;
}
if(e==1) /*若该列只有一个元素为非零,则进行消去操作*/
{
for(t=1;t<7;t++)
if(t!=i)
array[x][t]=0; /*将非零元素所在的行的其它元素置0*/
array[0][y]=0; /*设置该列已处理完毕的标记*/
}
}
}
for(i=1;i<7;i++) /*输出推理结果*/
{
printf("%c is coming from ",'A'-1+i);
for(j=1;j<7;j++)
if(array[i][j]!=0)
{
printf("%s.\n",country[array[i][j]]);
break;
}
}
}