C语言的一道题。网上的代码看不懂,求解释!

两个乒乓球队进行比赛,各出三人。球队为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();
}
这是从网上找的代码,测试通过,但是没看懂。谁能给解释下。

#include "stdio.h"
#include "conio.h"
main()
{
char i,j,k;/*i是a的对手,j是b的对手,k是c的对手*/
for(i='x';i<='z';i++)//循环枚举a的对手
for(j='x';j<='z';j++)//循环枚举b的对手
{
if(i!=j)//a的对手不能跟b的对手一样
for(k='x';k<='z';k++)//循环枚举c的对手
{
if(i!=k&&j!=k)//c的对手不能跟a或b的一样
{
if(i!='x'&&k!='x'&&k!='z')//a的对手不能是x,c的对手不能是x或z
printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);//满足所有条件,输出结果
}
}
}
getch();//字符缓冲
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-09-01
把i,j,k换成a,b,c应该就能看懂了吧!
其实就是通过循环遍历各种排列组合,找出符合条件的结果:
#include "stdio.h"
#include "conio.h"
main()
{
char a,b,c;
for(a='x';a<='z';a++)
for(b='x';b<='z';b++)
{
if(a!=b) // a和b的对手不应该是同一个人
for(c='x';c<='z';c++)
{
if(a!=b&&b!=c) // a,b,c的对手不应该是同一个人
{
if(a!='x'&&c!='x'&&c!='z') // a说他不和x比,c说他不和x,z比
printf("order is a--%c\tb--%c\tc--%c\n",a,b,c);
}
}
}
getch();
}
相似回答
大家正在搜