题目链接:http://poj.org/problem?id=1007
本题属于字符串排序问题。思路很简单,把每行的字符串和该行字符串统计出的字母逆序的总和看成一个结构体。最后把全部行按照这个总和从小到大排序即可。
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 struct DNA 6 { 7 char s[100]; 8 int count; 9 } d[100]; 10 11 int cmp(DNA a, DNA b) 12 { 13 return a.count < b.count; // 把全部DNA按照count从小到大排序 14 } 15 16 int main() 17 { 18 int i, j, k, m, n, tot; 19 while (cin >> n >> m) 20 { 21 for (k = 0; k < m; k++) 22 { 23 scanf("%s", d[k].s); 24 //cout << d[i].s << endl; 25 tot = 0; 26 for (i = 0; i < n; i++) 27 { 28 for (j = i+1; j < n; j++) // 统计每行字母逆序的总数 29 { 30 if (d[k].s[i] > d[k].s[j]) 31 tot++; 32 } 33 } 34 d[k].count = tot; 35 } 36 sort(d, d+m, cmp); 37 for (i = 0; i < m; i++) 38 { 39 cout << d[i].s << endl; 40 } 41 } 42 return 0; 43 }