自动求出成绩系统

昨天面试一家公司,遇到的一个面试题;

题目:

:随机输入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;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值