题目不难 实现起来注意细节即可
写的不是很好 请多包涵 欢迎指正!
#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分
0 人评分