目录
输入
授予职位
输出前按输出规则排序
输出
最后代码
题目是非常长长长长长长长长长长长长长长长长长长长长长长长长长长长长长(我花了2个小时才做完)
这题是大模拟(打磨你),题目也很长,需要耐心读题
1.所有信息输入后排序,排序方式如下:
(1)先按帮贡排序;
(2)如帮贡一样,则按输入顺序排列。
2.再重新编好职位后排输出顺序,也就是职位内的排名,排序方式如下:
(1)先按现在的职位排序;
(2)如职位相同,再按等级排序;
(3)如果恰好等级还破天荒地一样,则按输入顺序排列。
如果看到这你的疑惑已经解开了,那就点完赞继续写你的代码吧!还不会写的小伙伴们跟我来!
输入
//主函数外
const int N = 120;
struct node {
string name, zw;//名字 职位
int bg, level, xh;//帮贡 等级 序号
} a[N];
//主函数内
int n;
cin >> n;
for (int i = 1; i <= n; i ++) {
cin >> a[i].name >> a[i].zw >> a[i].bg >> a[i].level;
a[i].xh = i;
}
授予职位
//主函数外
bool cmp1(node x, node y) {
//帮贡 -> 原顺序
if (x.bg == y.bg)
return x.xh < y.xh;
else
return x.bg > y.bg;
}
//主函数内
//排序 帮主和副帮主不动
sort(a + 4, a + n + 1, cmp1);
//授予职位
for (int i = 1; i <= n; i ++) {
if (i == 1)
a[i].zw = "BangZhu";
else if (i <= 3)
a[i].zw = "FuBangZhu";
else if (i <= 5)
a[i].zw = "HuFa";
else if (i <= 9)
a[i].zw = "ZhangLao";
else if (i <= 16)
a[i].zw = "TangZhu";
else if (i <= 41)
a[i].zw = "JingYing";
else
a[i].zw = "BangZhong";
}
输出前按输出规则排序
//主函数外
int sort_zw(string x) {
if (x == "BangZhu")
return 6;
if (x == "FuBangZhu")
return 5;
if (x == "HuFa")
return 4;
if (x == "ZhangLao")
return 3;
if (x == "TangZhu")
return 2;
if (x == "JingYing")
return 1;
if (x == "BangZhong")
return 0;
}
bool cmp2(node x, node y) {
//职位 -> 等级 -> 原顺序
if (sort_zw(x.zw) == sort_zw(y.zw)) {
if (x.level == y.level)
return x.xh < y.xh;
else
return x.level > y.level;
} else {
return sort_zw(x.zw) > sort_zw(y.zw);
}
}
//主函数内
//新花名册排序
sort(a + 1, a + n + 1, cmp2);
输出
//输出新花名册
for (int i = 1; i <= n; i ++)
cout << a[i].name << ' ' << a[i].zw << ' ' << a[i].level << '\n';
最后代码
#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
const int N = 120;
struct node {
string name, zw;//名字 职位
int bg, level, xh;//帮贡 等级 序号
} a[N];
int n;
int sort_zw(string x) {
if (x == "BangZhu")
return 6;
if (x == "FuBangZhu")
return 5;
if (x == "HuFa")
return 4;
if (x == "ZhangLao")
return 3;
if (x == "TangZhu")
return 2;
if (x == "JingYing")
return 1;
if (x == "BangZhong")
return 0;
}
bool cmp1(node x, node y) {
//帮贡 -> 原顺序
if (x.bg == y.bg)
return x.xh < y.xh;
else
return x.bg > y.bg;
}
bool cmp2(node x, node y) {
//职位 -> 等级 -> 原顺序
if (sort_zw(x.zw) == sort_zw(y.zw)) {
if (x.level == y.level)
return x.xh < y.xh;
else
return x.level > y.level;
} else {
return sort_zw(x.zw) > sort_zw(y.zw);
}
}
int main() {
//输入
cin >> n;
for (int i = 1; i <= n; i ++) {
cin >> a[i].name >> a[i].zw >> a[i].bg >> a[i].level;
a[i].xh = i;
}
//排序 帮主和副帮主不动
sort(a + 4, a + n + 1, cmp1);
//授予职位
for (int i = 1; i <= n; i ++) {
if (i == 1)
a[i].zw = "BangZhu";
else if (i <= 3)
a[i].zw = "FuBangZhu";
else if (i <= 5)
a[i].zw = "HuFa";
else if (i <= 9)
a[i].zw = "ZhangLao";
else if (i <= 16)
a[i].zw = "TangZhu";
else if (i <= 41)
a[i].zw = "JingYing";
else
a[i].zw = "BangZhong";
}
//新花名册排序
sort(a + 1, a + n + 1, cmp2);
//输出新花名册
for (int i = 1; i <= n; i ++)
cout << a[i].name << ' ' << a[i].zw << ' ' << a[i].level << '\n';
return 0;
}
AC证明 戳我鸭
原题链接
我绝对是一个蒟蒻,但你看得这么认真,点个赞加个油吧!
创作不易,禁止转载
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)