趣味编程——区分旅客国籍

在一个宾馆里住这六个不同国籍的人,他们分别来自美国,德国,英国,法国,俄罗斯和意大利。他们的名字叫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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值