成绩排名(PTA)

该程序实现了一个C++算法,用于根据输入的学生课程成绩和学分计算最终成绩,并按照成绩高低进行排名。输入包括学生人数、课程数量、各课程学分以及每个学生的各科成绩,输出为排名和对应的最终成绩。程序通过遍历和比较学生成绩进行排序,确保了成绩相同的学生按输入顺序排列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

某学校的成绩单算法如下:

最终成绩 = (A课成绩 * A课学分 + B课成绩 * B课学分 + C课成绩 * C课学分 + D课成绩 * D课学分)/总学分,结果保留两位小数。

如某同学成绩如下:

课程名称学 分分 数
算法分析与设计4.090
大学物理3.585
Python程序设计3.095
计算机系统基础4.082.5
线性代数3.080

则他的最终成绩为

(4.0 * 90 + 3.5 * 85 + 3.0 * 95 + 4.0 * 82.5 + 3.0 * 80)/(4.0+3.5+3.0+4.0+3.0) = 86.43

现在给你几组学生的成绩,要求你计算他们的最终成绩,并对他们进行排名。

输入格式:

第一行输入两个数,学生的个数S(10000以内)及课程数C(100以内)。

第二行输入C个数,分别是C门课程的学分。

接下来的S行,每一行有C个数,这C个数分别代表学生C门课的成绩,每门课的成绩出现顺序与第二行的学分一一对应。

每门课的成绩满分为100分,学分最高不超过10。

输出格式:

输出有S行,由高到低的输出学生的最终成绩,以及学生在输入中出现的次序(从1开始),如果有最终成绩相同的学生,则他们的顺序按输入中的次序有小到大排列。成绩保留两位有效数字。

输入样例:

在这里给出一组输入。例如:

4 2
2.5 4
90 80
94 92.5
80 75
90 95

输出样例:

在这里给出相应的输出。例如:

93.08 2
93.08 4
83.85 1
76.92 3
#include<bits/stdc++.h>
using namespace std;
void swap(int &a, int &b)
{
    int temp = a;
    a = b;
    b = temp;
}
int main(){
    int s,c,i,j;//s个学生,c个课程
    cin >> s >> c;
    float num[c],ct=0;//num每个学分,ct总学分
    for(i=0;i<c;i++){
        cin >> num[i];
        ct += num[i];
    }
    float val[s]={0},k;//val存储成绩,k每次输入成绩
    int val2[s]={0};
    for(i=0;i<s;i++){
        for(j=0;j<c;j++){
            cin >> k;
            val[i]+=k*num[j];
            val2[i]=i+1;
        }
    val[i]/=ct;
    }
    for(i=0;i<s-1;i++)
        for(j=0;j<s-1-i;j++){
            if(val[j]<val[j+1]){
                swap(val[j],val[j+1]);
                swap(val2[j],val2[j+1]);
            }
        }
    for(i=0;i<s;i++){
        if(i)cout <<endl;
        printf("%.2f %d",val[i],val2[i]);
        
    }
    
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值