思路:记每个队员的编号为i,站位为a[i]。
每个队员的球衣都与他们的站位号不同,即任意i,a[i]≠i。
且显然不能有两个人占着同一个位置。
#include<iostream>
using namespace std;
int main() {
int a[7] = { 0 };
for (a[1]=1;a[1]<=6;a[1]++)
for (a[2] = 1; a[2] <= 6; a[2]++)
for (a[3] = 1; a[3] <= 6; a[3]++)
for (a[4] = 1; a[4] <= 6; a[4]++)
for (a[5] = 1; a[5] <= 6; a[5]++)
for (a[6] = 1; a[6] <= 6; a[6]++) {
bool equa = 0;//equa用来标记不能有两个人占着同一个位
for (int x=1;x<=6;x++)
for (int y = 1; y <= 6; y++) {
if (x == y)
continue;
else {
if (a[x] == a[y]) {
equa = 1;
break;
}
}
}
if ((a[1] == 1) || (a[2] == 2) || (a[3] == 3) || (a[4] == 4) || (a[5] == 5) || (a[6] == 6)||(equa==1))
continue;
else {
if ((a[1] != 5) && (a[1] != 6) && (a[6] != 1) && (a[6] != 5))
if ((a[2] != 5) && (a[3] != 5) && (a[3] != 2))
if (!((((a[3] + 4) % 6 < 3) && ((a[4] + 4) % 6 < 3)) || (((a[3] + 4) % 6 >= 3) && ((a[4] + 4) % 6 >= 3))))
if ((a[5] != 3) && (a[5] != 6) && (a[6] != 3))
for (int i = 1; i <= 6; i++)
cout << i << "号队员占" << a[i] << "位"<<endl;
}
}
return 0;
}
输出样例: