• C++模拟与高精度——帮贡排序


    题目背景

    在 absi2011 的帮派里,死号偏多。现在 absi2011 和帮主等人联合决定,要清除一些死号,加进一些新号,同时还要鼓励帮贡多的人,对帮派进行一番休整。

    题目描述

    目前帮派内共最多有一位帮主,两位副帮主,两位护法,四位长老,七位堂主,二十五名精英,帮众若干。

    现在 absi2011 要对帮派内几乎所有人的职位全部调整一番。他发现这是个很难的事情。于是要求你帮他调整。

    他给你每个人的以下数据:

    他的名字(长度不会超过 30),他的原来职位,他的帮贡,他的等级。

    他要给帮贡最多的护法的职位,其次长老,以此类推。

    可是,乐斗的显示并不按帮贡排序而按职位和等级排序。

    他要你求出最后乐斗显示的列表(在他调整过职位后):职位第一关键字,等级第二关键字。

    注意:absi2011 无权调整帮主、副帮主的职位,包括他自己的(这不是废话么..)

    他按原来的顺序给你(所以,等级相同的,原来靠前的现在也要靠前,因为经验高低的原因,但此处为了简单点省去经验。)

    输入格式

    第一行一个正整数 n,表示星月家园内帮友的人数。

    下面 n 行每行两个字符串两个整数,表示每个人的名字、职位、帮贡、等级。

    输出格式

    一共输出 n行,每行包括排序后乐斗显示的名字、职位、等级。

    分析:

    先按照帮贡排序,分出职务,在根据职务相同的,按照等级排序,等级一样,按输入顺序排序。

    代码:

    1. #include
    2. using namespace std;
    3. struct bangpai
    4. {
    5. string name;
    6. string zhiwu;
    7. int gongxian;
    8. int dengji;
    9. int xh;
    10. }a[111];
    11. int b(string a) {
    12. if (a == "BangZhu") return 0;
    13. if (a == "FuBangZhu") return 1;
    14. if (a == "HuFa") return 2;
    15. if (a == "ZhangLao") return 3;
    16. if (a == "TangZhu") return 4;
    17. if (a == "JingYing") return 5;
    18. if (a == "BangZhong") return 6;
    19. }
    20. int px1(bangpai x, bangpai y) {//贡献排序
    21. if (x.gongxian == y.gongxian)//贡献一样,按序号排序,不一样,按贡献排序
    22. return x.xh < y.xh;
    23. else
    24. return x.gongxian > y.gongxian;
    25. }
    26. int px2(bangpai x, bangpai y) {//等级排序
    27. if (x.zhiwu == y.zhiwu) {
    28. if (x.dengji == y.dengji)//职务一样,等级相同,按序号排序,等级不一样,按等级排序
    29. return x.xh < y.xh;
    30. else
    31. return x.dengji > y.dengji;
    32. }
    33. else
    34. return b(x.zhiwu) < b(y.zhiwu);//职务不一样的,按职务大小排序
    35. }
    36. int main() {
    37. int n,t,z,p;
    38. cin >> n;
    39. for (int i = 1; i <= n; i++) {
    40. cin >> a[i].name >> a[i].zhiwu >> a[i].gongxian >> a[i].dengji;
    41. a[i].xh = i;
    42. }
    43. sort(a + 4, a + 1 + n, px1);
    44. for (int i = 4; i <= n; i++) {
    45. if (i == 4 || i == 5) a[i].zhiwu = "HuFa";
    46. else if (i >= 6 && i <= 9) a[i].zhiwu = "ZhangLao";
    47. else if (i >= 10 && i <= 16) a[i].zhiwu = "TangZhu";
    48. else if (i >= 17 && i <= 41) a[i].zhiwu = "JingYing";
    49. else a[i].zhiwu = "BangZhong";
    50. }
    51. sort(a + 4, a + 1 + n, px2);
    52. for (int i = 1; i <= n; i++) {
    53. cout << a[i].name << " " << a[i].zhiwu << " " << a[i].dengji << endl;
    54. }
    55. return 0;
    56. }

  • 相关阅读:
    【开源】基于微信小程序的音乐平台
    Decorator 装饰者模式简介与 C# 示例【结构型4】【设计模式来了_9】
    PMP每日一练 | 考试不迷路-8.29(包含敏捷+多选)
    软著申请流程
    李超线段树
    优化Redis缓存淘汰机制解决性能测试中报错率逐渐攀升问题
    基于SSM花卉商城设计与实现
    VoxEdit 主题创作大赛:将 90 年代的复古元素带入 Web3
    【学习笔记之数据结构】顺序表
    STM32F4X UCOSIII 消息队列
  • 原文地址:https://blog.csdn.net/weixin_48726365/article/details/126747988