网上寻求帮助,最后用next_permutation(array,array+n) 与 do while 循环来生成全排列。而位置的比较,通过cstring中的strchr 来查找到第一次出现的位置。 http://www.cplusplus.com/reference/clibrary/cstring/strchr/ http://www.cplusplus.com/reference/algorithm/next_permutation/ C++ CODE #include <iostream> #include <string> #include <algorithm> #include <stdio.h> #include <cstring> using namespace std; int main() { int N; char input[101][6]; while( cin >> N && N ) { for(int i=0;i<N;++i) { scanf("%s",input[i]); } int count,min=10000; char team[6]={'A','B','C','D','E'}; char output[6]; do { count = 0; for(int t=0;t<N;++t) { //Test N input cases for(int j=0;j<4;++j) { //Test input and the team-pernutation for(int k=j+1;k<5;++k) { if(strchr(input[t],team[j]) > strchr(input[t],team[k])) { count++; } } } } if(count<min) { min = count; memcpy(output,team,6); } } while( next_permutation(team,team+5) ); printf("%s is the median ranking with value %d./n",output,min); } return 0; }