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 }

 

源码

转载于:https://www.cnblogs.com/ashley-/p/4151761.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值