You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++如何接收含空格输入存入vector并计算高于平均分学生占比

问题原因分析
  • 多余的提示输出:题目要求从标准输入读取数据,不需要输出Num of Students:、Enter grades:这类提示内容,会导致输出不符合要求。
  • 输入逻辑错误:混用std::cin和std::getline,且grade1未初始化就被使用,还定义了无用的std::string grade变量。实际上C++的std::cin >> 整数变量默认就可以自动跳过空格、换行符,不需要自行用getline处理带空格的输入。
  • 逻辑结构错误:所有测试用例的成绩都存在同一个vector中,且仅在所有测试用例读取完成后计算一次平均值,不符合每组测试用例单独计算输出的要求。
  • 计算逻辑错误:
    1. 平均值计算用整数除法,存在精度丢失
    2. 百分比计算错误:正确逻辑是(高于平均分人数 / 总人数) * 100,原代码错误写为乘10
    3. 整数除法截断问题: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;
}
修改点说明
  1. 移除所有调试用的提示输出,符合标准输入输出要求
  2. 简化输入逻辑:直接用std::cin读取成绩,自动跳过空格和换行符,完美支持题目要求的任意空白分隔的输入格式
  3. 调整逻辑结构:每个测试用例单独创建成绩vector,读取完成后立即计算当前用例的结果并输出,符合多测试用例的处理要求
  4. 修正所有计算逻辑错误,保证结果精度符合要求

内容的提问来源于stack exchange,提问作者dilly_juana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:27:00