昨天面试一家公司,遇到的一个面试题;
题目:
:随机输入n个同学的成绩,自动计算出及格线,条件:
a.及格线是5的倍数;
b.必须有70%的人及格;
c.如果所有人的分数都大于60分,则及格线为60;
d.面向对象
解答思路:
1.随机输入N个同学的成绩并放入到vector容器;
2.对容器进行排序sort(v.begin,b.end,compare);
3.判断最后一个元素是否大于60 ,如果大于60,则及格线就是60分;
4.否则,求出70%的人数所在的序号;
5.得到序号的分数,根据分数求出其5的倍数,先整除5,再乘以5 score/5*5;
6.输出结果;
const float SUCCPERFENT = 0.70f;
bool CompareScore(double a, double b)
{
return a > b;
}
int _tmain()
{
int succScore = 0;
double dbScore = 0;
vector<double> vAllScore;
int iStud = 0;
vAllScore.clear();
cout << "请输入学生的成绩,输入大于100结束输入" << endl;
//输入成绩
cin >> dbScore;
while (dbScore <= 100)
{
vAllScore.push_back(dbScore);
cin >> dbScore;
}
//排序成绩
iStud = vAllScore.size();
sort(vAllScore.begin(), vAllScore.end(),CompareScore);
//计算成绩
if (vAllScore[iStud-1] >= 60)
{
succScore = 60;
}
else
{
int index = ceil(iStud*SUCCPERFENT); //取第几个序号是满足成功率70的
int iScore = floor(vAllScore[index-1]);
succScore = (iScore / 5) * 5;
}
cout << "及格线为:" << succScore << endl;
return 0;
}