原题链接
解析
实现方法
一看题:这不就是道排序吗?
但是——
用啥办法呢?
这自带的排序方法,肯定是不能用了
那么我们就来写一个cmp排序函数吧!
但是——
输出排序呢?
所以得再写一个cmp排序函数······
排序
第一个cmp
注意!不能改变帮主和副帮主的职位!
1.先按照帮贡从大到小排序
2.如果帮贡一样,则按照输入顺序排序
可以从输入的时候就编好号,
然后按从大到小排序
第二个cmp
在这途中按照排好帮贡的顺序分发职位;
1.先按现在的职位排序。
可以手编一个职位转变为数字的函数,假设函数职位越大返回值越小,那么就从小到大排序。
(由于帮主和副帮主职位肯定更大,所以不需要考虑absi2011的权限问题)
2.职位一样,按照等级从大到小排序
3.如果等级一样,则按照输入顺序排序
可以从输入的时候就编好号,
然后按从大到小排序
具体代码实现
1.初始化 and 输入
struct people {
string name, before, now;
long long xp;
int level, id;
};
struct people a[120];
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i].name >> a[i].before >> a[i].xp >> a[i].level;
a[i].id = i;
}
2.第一个cmp
bool cmp1(people a, people b) {
if (a.xp == b.xp) return a.id < b.id;
else return a.xp > b.xp;
}
sort(a + 4, a + n + 1, cmp1);
3.分发职位
for (int i = 1; i <= n; i++) {
if (i == 1) a[i].now = "BangZhu";
else if