兩個乒乓球隊進行比賽,各出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();
}