贺州学院ivy


私信TA

用户名:Livy

访问量:22598

签 名:

好好学习,天天向上,汝何秀?

等  级
排  名 135
经  验 7529
参赛次数 5
文章发表 25
年  龄 0
在职情况 学生
学  校 贺州学院
专  业 软件工程

  自我简介:

假猪套天下第一

解题思路:

typedef struct student{
 string name;
 int score;
}stu;

一个结构体,存名字和分数

按照题意输入成绩和姓名,成绩是累加的,在处理同分的情况,我们先完成每一次的输入后,进行降序排序

因为是结构体,需要自己写一个cmp的比较函数

bool cmp(stu a, stu b){
 return a.score > b.score;
}

sort函数原型

sort(排序数组的起始位置,排序数组的终止位置,比较函数)三个参数

sort函数包含在#include<algorithm>头文件中

还有,说一下,sort函数是对 [x,y)位置区间区间进行排序的

如sort(a+6,a+10)

这是对a[6]-a[9]之间的4个数排序

排序好之后,就需要来处理同分数的时候的排名了

就如 (我这里给分数后加一个d表示是DaDa)

 

100d 100 56 12 2 0

这里他是第一位,所以就是第一,输出1

89  78 78 78d 78 12 3 1,当是这种情况

他是排在第四位的

所以我们这样子来,先遍历到DaDa的位置,此时是第四名

然后判断他的上一个人是不是和他分数相同,是的话就名次-1,

DaDa是第四,他的上一位也是78,所以4-1=3

然后在3的位置,继续判断上一个是不是

DaDa的名次现在是第三了,判断后,第二名也和他分数一样,名字再次-1

现在DaDa名次是第二了,接着判断第一位和他一样分数不,很明显不一样,就直接退出循环


注意事项:

是总分,是总分,是总分....当时我也被坑了好几次.......就是每一次输入的成绩是累加的,累加后的每一次来排名的........

参考代码:

#include<iostream>
#include<string.h>
#include<string>
#include<algorithm>
#include<functional>
#include<map>
#include<math.h>

typedef struct student{
        string name;
        int score;
}stu;
stu s[150];
bool cmp(stu a, stu b){
      return a.score > b.score;
}
int main(){
           int n, m;
           cin >> n;
           for (int i = 1; i <= n; i++)cin >> s[i].name;
           cin >> m;
           while (m){
                           int snum;
                           string sname;
                           for (int i = 1; i <= n; i++){
                                         cin >> snum;
                                         cin >> sname;
                                          for (int j = 1; j <= n; j++){
                                                       if (sname == s[j].name){
                                                                  s[j].score += snum; break;
                                                        }
                                           }
                            }
                            sort(s + 1, s + 1+n,cmp);
                            for (int i = 1; i <= n; i++){
                                          if (s[i].name == "DaDa"){
                                          while (s[i].score == s[i - 1].score){
                                                           i--;
                                           }
                                            cout << i << endl;
                                            break;
                                           }
                            }
                            m--;
            }
           return 0;
}

 

0.0分

0 人评分

  评论区

你少写了using namespace std;
2019-05-19 17:41:43
  • «
  • 1
  • »