2301_78789580 2024-04-22 15:24 采纳率: 0%
浏览 20

c++hagufdiOssrio

https://pintia.cn/problem-sets/1780905363684728832/exam/problems/1780905676168753164?type=7&page=0
13 GPA
分数 300
作者 江太白
单位 江西财经大学
输入格式:
输入的第一行包含一个整数n表示A的课程数,以下n行每行Si,Ci分别表示第i个课程的学分与A的表现。

GPA=Σ(Si*Ci) / Σ(Si)。

特殊地,如果Ci是'P'或者'N'(对应于通过与不通过),则第i个课程不记入GPA的计算(即当其不存在)。

A读入结束后读入B,B的输入格式与A相同。

保证2人的Σ(Si)非零

输出格式:
输出A的GPA - B的GPA的值,保留2位小数(四舍五入)

Tips:当A和B的分数相近时输出0.00。

输入样例:
2
1 10
2 N
2
1 10
1 5
输出样例:
2.50
数据规模和约定
输入的所有数字均为不超过100的非负整数

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n=0;
    cin>>n;
    double g1=0,g2=0;
    int s1=0,s2=0;
    double c1=0,c2=0;
    int sum1=0,sum2=0;
    while(n--)
    {
        string str;
        cin>>s1>>str;
        if(str=="P"||str=="N")
            ;
        else
        {
            c1=atof(str.c_str());
            sum1+=s1;
            g1+=s1*c1;
        }
    }
    if(sum1!=0)
        g1/=sum1*1.0;
    cin>>n;
    while(n--)
    {
        string str;
        cin>>s2>>str;
        if(str=="P"||str=="N")
            ;
        else
        {
            c2=atof(str.c_str());
            sum2+=s2;
            g2+=s2*c2;
        }
    }
    if(sum2!=0)
        g2/=sum2*1.0;
    printf("%.2lf",g1-g2);
    return 0;
}


有一个测试用例无法通过,求uu们帮助看看

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-22 15:24
    关注

    引自免费微信小程序:皆我百晓生

    在提供的代码中,存在一个问题,当用户输入的学分成绩对中的第二个元素为字符"P"或"N"时,程序会跳过这次循环,但是没有对学分进行累加。因此,你需要修改代码,在处理字符串时,只有当成绩不是"P"或"N"时才累加学分。以下是修复后的代码:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
        int n = 0;
        cin >> n;
        double g1 = 0, g2 = 0;
        int s1 = 0, s2 = 0;
        double c1 = 0, c2 = 0;
        int sum1 = 0, sum2 = 0;
        
        // 修改这里,将判断移到学分累加之后
        while (n--) {
            cin >> s1 >> str;
            sum1 += s1; // 先累加学分
            if (str == "P" || str == "N") {
                continue;
            } else {
                c1 = atof(str.c_str());
                g1 += s1 * c1;
            }
        }
        if (sum1 != 0) {
            g1 /= sum1 * 1.0;
        }
    
        cin >> n;
        while (n--) {
            cin >> s2 >> str;
            sum2 += s2; // 同样先累加学分
            if (str == "P" || str == "N") {
                continue;
            } else {
                c2 = atof(str.c_str());
                g2 += s2 * c2;
            }
        }
        if (sum2 != 0) {
            g2 /= sum2 * 1.0;
        }
        printf("%.2lf", g1 - g2);
        return 0;
    }
    

    这个修改后的代码应该可以正确处理所有情况,包括学分成绩对中成绩为"P"或"N"的情况。现在,无论成绩是否计入GPA,对应的学分都会被累加到总学分中。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月22日

悬赏问题

  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,
  • ¥20 需要帮我远程操控一下,运行一下我的那个代码,我觉得我无能为力了
  • ¥20 有偿:在ubuntu上安装arduino以及其常用库文件。
  • ¥15 请问用arcgis处理一些数据和图形,通常里面有一个根据点划泰森多边形的命令,直接划的弊端是只能执行一个完整的边界,但是我们有时候会用到需要在有很多边界内利用点来执行划泰森多边形的命令
  • ¥30 在wave2foam中执行setWaveField时遇到了如下的浮点异常问题,请问该如何解决呢?
  • ¥750 关于一道数论方面的问题,求解答!(关键词-数学方法)
  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊