Hdu 1084 What Is Your Grade?解题报告

本文介绍了一个C++程序,该程序能够读取学生的成绩次数,并按特定规则进行排序和评分。通过全局数组实现计数和比较,使用自定义结构体存储学生信息,通过两次排序确保输出符合要求。
#include<iostream>
#include
<vector>
#include
<string>
#include
<algorithm>
usingnamespacestd;

structGrade
...{
intnums;
intgrade;
stringtimes;
intindex;
}
;

vector
<Grade>g;
intcnt[6];
intn;

boolcmp1(Gradea,Gradeb)
...{
if(a.nums==b.nums)
returna.times<b.times;
else
returna.nums>b.nums;
}


boolcmp2(Gradea,Gradeb)
...{
returna.index<b.index;
}


voidgetGrade()
...{
intcnt2[6]=...{0};

for(inti=0;i<n;i++)
...{
if(g[i].nums==5)
g[i].grade
=100;
elseif(g[i].nums==0)
g[i].grade
=50;
else
...{
intk=g[i].nums;
if(cnt2[k]<cnt[k])
...{
g[i].grade
=55+k*10;
cnt2[k]
++;
}

else
g[i].grade
=50+k*10;
}

}

}


boolrun()
...{
cin
>>n;
if(n<0)returnfalse;
g.resize(n);

inti;
for(i=0;i<6;i++)cnt[i]=0;

for(i=0;i<n;i++)
...{
cin
>>g[i].nums>>g[i].times;
g[i].index
=i;
cnt[g[i].nums]
++;
}


sort(g.begin(),g.end(),cmp1);

for(i=0;i<6;i++)cnt[i]/=2;
getGrade();

sort(g.begin(),g.end(),cmp2);

for(i=0;i<n;i++)cout<<g[i].grade<<endl;

cout
<<endl;

returntrue;
}


intmain()
...{
while(run());
return0;
}

排序的一般方法,还要一点细心。方便起见,用用全局的数组,变量等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值