两个乒乓球队进行比赛,各出3人。甲队为A,B,C3人,乙队为X,Y,Z3人。已抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X,Z比,请编程序找出3对赛手的名单。
本题的难点在于,除了要筛选A不和X比,C不和X,Z比的条件所得结果以外,还需要保证1对1不重复,即A,B,C三人所面向对象不重复。
1⃣️开始时的错误代码:
#include <iostream>
//穷举
void Match()
{
for(char a='X';a<='Z';a++)//a为A的对手
{
for(char b='X';b<='Z';b++)//b为B的对手
{
for(char c='X';c<'Z';c++)//c为C的对手
{
if(a!='X'&&c!='X'&&c!='Z')
{
printf("A->%c,B->%c,C->%c\n",a,b,c);
}
}
}
}
}
int main()
{
Match();
}
输出结果如下:由结果我们可以看出,非1对1。
2⃣️我们将代码进行修改后:(在条件语句中加入了a!=b&&a!=c&&b!=c,即A、B、C对应的X、Y、Z是1对1的)
#include <iostream>
//穷举
void Match()
{
for(char a='X';a<='Z';a++)//a为A的对手
{
for(char b='X';b<='Z';b++)//b为B的对手
{
for(char c='X';c<'Z';c++)//c为C的对手
{
if(a!='X'&&c!='X'&&c!='Z'&&a!=b&&a!=c&&b!=c)
{
printf("A->%c,B->%c,C->%c\n",a,b,c);
}
}
}
}
}
int main()
{
Match();
}
输出正确结果:A->Z,B->X,C->Y
源代码如下:
#include
//穷举
void Match()
{
for(char a=‘X’;a<=‘Z’;a++)//a为A的对手
{
for(char b=‘X’;b<=‘Z’;b++)//b为B的对手
{
for(char c=‘X’;c<‘Z’;c++)//c为C的对手
{
if(a!=‘X’&&c!=‘X’&&c!=‘Z’&&a!=b&&a!=c&&b!=c)
{
printf(“A->%c,B->%c,C->%c\n”,a,b,c);
}
}
}
}
}
int main()
{
Match();
}