参考代码:
#include<iostream> #include<cstring> #include<algorithm> using namespace std; struct ST//自定义类型学生 { string str; int grade; }b[110]; bool comp(ST a,ST b)//排序条件 { return a.grade>b.grade; } int main() { //freopen("data.in.txt","r",stdin); //freopen("data.out.txt","w",stdout); int n; string str1; cin>>n;//先输入学生的人数 for(int i=0;i<n;i++) { cin>>str1;//输入学生的姓名 个人觉得此时输入的学生姓名没什么用 所以把值赋给str1。 } int m,grade;//m代表考试的门数 grade代表分数 string str;//str代表学生的姓名 cin>>m;//输入考试的门数 for(int i=0;i<m;i++) { if(i!=0)//如果不是第一次考试 { for(int j=0;j<n;j++) { cin>>grade>>str;//输入成绩与姓名 for(int k=0;k<n;k++) { if(str==b[k].str)//如果姓名与b数组中的字符串匹配 则对应的总分相加 b[k].grade +=grade; } } sort(b,b+n,comp);//输入完所有的分数和姓名之后 按分数从大到小排序 for(int k=0;k<n;k++) { if("DaDa"==b[k].str)//找到DaDa以及判断有没有和DaDa分数相等的人 如果有的话 DaDa总是要排在他前面 { while(b[k-1].grade ==b[k].grade ) { k--; } cout<<k+1<<endl;//输出DaDa最后的排名。 break; } } } if(i==0)//如果是第一次考试 { for(int j=0;j<n;j++) { cin>>b[j].grade>>b[j].str;//输入学生的成绩和与之相对的姓名 } sort(b,b+n,comp);//对得到的成绩进行从大到小的排序 for(int k=0;k<n;k++)//在排序后的b数组里面找到DaDa。 { if("DaDa"==b[k].str) { while(b[k-1].grade ==b[k].grade )//如果DaDa前面的人总分和DaDa 一样那么DaDa的名次总是要领先对面 { k--; } cout<<k+1<<endl;//输出DaDa最后的名次。 break; } } } } }
0.0分
2 人评分
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:552 |
求圆的面积 (C语言代码)浏览:1271 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:378 |
A+B for Input-Output Practice (II) (C语言代码)浏览:999 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:575 |
简单的a+b (C语言代码)浏览:632 |
C语言程序设计教程(第三版)课后习题9.1 (C语言代码)浏览:682 |
1017题解浏览:605 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:514 |
printf基础练习2 (C语言代码)浏览:508 |