C语言经典算法100例-022-乒乓球比赛名单问题

我们来看题:

两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

1.分析,如果没有任何规矩可言,那么a可以跟x,y,z中的任何一个比,而b,c同样是,但是规矩是有的,那就是a,b,c不能和相同的对手比赛。所以,方法就是,三层循环,然后用条件语句层层筛选,打印出来满足需求的匹配。

2.源程序:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,j,k;  //i,j,k分别对应a,b,c的对手
    for(i='x';i<='z';i++)
        for(j='x';j<='z';j++)
            if(j!=i)
                for(k='x';k<'z';k++)
                    if(k!=i&&k!=j)
                        if(i!='x'&&k!='x'&&k!='z')
                            printf("a-%c b-%c c-%c",i,j,k);
    return 0;
}

刚开始看到这个题,我想得很复杂也没想到好的办法,后来看了答案才豁然开朗,只需要3个变量就可以了,因为a,b,c的位置是确定的,而且x,y,z可以转化为对应的整数,直接放到循环里就可以了。脑子好迟钝,学如逆水行舟,不进则退啊。