这个算法看不明白 跪求详细解说

来源:百度知道 编辑:UC知道 时间:2024/06/30 23:37:14
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
程序源代码:
#include "stdio.h"
#include "conio.h"
main()
{
char i,j,k;/*i是a的对手,j是b的对手,k是c的对手*/
for(i='x';i<='z';i++)
for(j='x';j<='z';j++)
{
if(i!=j)
for(k='x';k<='z';k++)
{
if(i!=k&&j!=k)
{
if(i!='x'&&k!='x'&&k!='z')
printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);
}
}
}
getch();
}
===============================================================
请写出算法分析过程 谢谢

这是个典型的穷举算法,就是用三层循环来遍历所有可能的对阵,看哪种能符合要求.
i,j,k分别可以取'x','y','z'来表示a,b,c的对手.比如j的值是'x'的话,那么就表示b的对手是x.
因为题目隐含了"每人的对手都不同"这一条件,所以对每种可能对阵,要检查是否符合i!=j,i!=k,j!=k.
而i!='x'就是a不和x对阵
k!=x&&k!='z'就是c不和x,z对阵.