参考代码:
#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语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:1000 |
简单的a+b (C语言代码)浏览:641 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:552 |
C语言程序设计教程(第三版)课后习题6.8 (C++代码)浏览:614 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:628 |
【蟠桃记】 (C语言代码)浏览:1084 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:536 |
Tom数 (C语言代码)浏览:517 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:644 |
筛排处理 (C语言代码)浏览:830 |