首页 > 代码库 > Sicily-1006

Sicily-1006

一.  题意

   这道题就是考排列组合吧,再来就是比较一下字符的下标算一下两个ranking的距离。然后我总结了一个排列和一个组合的实现方法,这道题直接用的是stl    里面的next_permutation,注意要排好序,好像也有一个previous_permutation的方法的,不过没用过。

二.  过程

  1. 算出120情况,还好这里是5个字符
  2. 然后写出计算两个ranking的函数。
  3. 然后就是算最小值啦。

三.  

 1 // 2 //  main.cpp 3 //  sicily-1006 4 // 5 //  Created by ashley on 14-10-7. 6 //  Copyright (c) 2014年 ashley. All rights reserved. 7 // 8  9 #include <iostream>10 #include <algorithm>11 #include <stack>12 using namespace std;13 string permutations[120];14 string guess[100];15 //获得120种ABCDE的排列情况16 void getPermutaions()17 {18     int counter = 0;19     string cha = "ABCDE";20     string adding;21     do {22         adding = cha;23         permutations[counter++] = adding;24     } while (next_permutation(cha.begin(), cha.begin() + 5));25 }26 //查找一个字符在字符串里面的下标27 int finding(char c, string s)28 {29     int len = (int)s.length();30     for (int i = 0; i < len; i++) {31         if (s[i] == c) {32             return i;33         }34     }35     return 0;36 }37 //计算两个字符串的差值38 int compare(string ss, string r)39 {40     int len = (int)ss.length();41     int sum = 0;42     for (int i = 0; i < len - 1; i++) {43         for (int j = i + 1; j < len; j++) {44             if (finding(r[i], ss) > finding(r[j], ss)) {45                 sum++;46             }47         }48     }49     return sum;50 }51 int main(int argc, const char * argv[])52 {53     int cases;54     getPermutaions();55     while (cin >> cases) {56         if (cases == 0) {57             break;58         }59         int min = 25 * cases;60         int key = -1;61         for (int i = 0; i < cases; i++) {62             cin >> guess[i];63         }64         for (int i = 0; i < 120; i++) {65             int diff = 0;66             for (int j = 0; j < cases; j++) {67                 diff = diff + compare(guess[j], permutations[i]);68             }69             if (diff < min) {70                 key = i;71                 min = diff;72             }73         }74         cout << permutations[key] << " is the median ranking with value " << min << "." << endl;75     }76     return 0;77 }

 

源码

Sicily-1006