C++如何接收含空格输入存入vector并计算高于平均分学生占比
问题原因分析
- 多余的提示输出:题目要求从标准输入读取数据,不需要输出
Num of Students:、Enter grades:这类提示内容,会导致输出不符合要求。 - 输入逻辑错误:混用
std::cin和std::getline,且grade1未初始化就被使用,还定义了无用的std::string grade变量。实际上C++的std::cin >> 整数变量默认就可以自动跳过空格、换行符,不需要自行用getline处理带空格的输入。 - 逻辑结构错误:所有测试用例的成绩都存在同一个
vector中,且仅在所有测试用例读取完成后计算一次平均值,不符合每组测试用例单独计算输出的要求。 - 计算逻辑错误:
- 平均值计算用整数除法,存在精度丢失
- 百分比计算错误:正确逻辑是
(高于平均分人数 / 总人数) * 100,原代码错误写为乘10 - 整数除法截断问题:
counter和numOfStudents都是整型,直接相除会得到整数结果0,需要先转成浮点型计算。
修改后可运行代码
#include <iomanip> #include <iostream> #include <numeric> #include <vector> int main() { int testCases; std::cin >> testCases; // 全局设置输出格式:保留3位小数 std::cout << std::fixed << std::setprecision(3); for (int i = 0; i < testCases; ++i) { int numOfStudents; std::cin >> numOfStudents; std::vector<int> grades(numOfStudents); // 直接用cin读取成绩,自动跳过空格、换行 for (int j = 0; j < numOfStudents; ++j) { std::cin >> grades[j]; } // 计算当前测试用例的平均分 int sum = std::accumulate(grades.begin(), grades.end(), 0); double avg = static_cast<double>(sum) / numOfStudents; // 统计高于平均分的人数 int aboveCount = 0; for (int grade : grades) { if (grade > avg) { aboveCount++; } } // 计算百分比并输出 double percentage = static_cast<double>(aboveCount) / numOfStudents * 100; std::cout << percentage << "%" << std::endl; } return 0; }
修改点说明
- 移除所有调试用的提示输出,符合标准输入输出要求
- 简化输入逻辑:直接用
std::cin读取成绩,自动跳过空格和换行符,完美支持题目要求的任意空白分隔的输入格式 - 调整逻辑结构:每个测试用例单独创建成绩vector,读取完成后立即计算当前用例的结果并输出,符合多测试用例的处理要求
- 修正所有计算逻辑错误,保证结果精度符合要求
内容的提问来源于stack exchange,提问作者dilly_juana
相关产品推荐
相关产品推荐

