PTA天梯赛L2-015 互评成绩(25分)C++看完包会

本文解析了如何通过C++实现学生评分的非递减序列排序,展示了从输入成绩到计算最终排名的全过程。关键步骤包括成绩收集、排序算法应用和结果输出。

输入样例:

6 5 3
88 90 85 99 60
67 60 80 76 70
90 93 96 99 99
78 65 77 70 72
88 88 88 88 88
55 55 55 55 55

输出样例:

87.667 88.000 96.000

源代码:

#include<iostream>
#include<vector>
#include<algorithm>
#include<iomanip>

using namespace std;

bool cmp(int a,int b)   //设置int类型cmp函数,递减排序
{
    return a>b;
}
bool cmp_1(double a,double b)  //设置double类型cmp函数,递增排序
{
    return a<b;
}

int main()
{
    int n,k,m;
    cin>>n>>k>>m;
    vector<int> vec[n];//存入每个人的成绩
    vector<double> vec_1;//存入每个人最后成绩
    
    for(int i=0;i<n;i++)
    {
        int sum=0; //定义总成绩
        double aver=0; //定义平均成绩
        for(int j=0;j<k;j++)
        {
            int t;
            cin>>t;
            vec[i].push_back(t); //将每个人评的成绩输入
            sum+=t;          //累加总成绩
        }
        sort(vec[i].begin(),vec[i].end());   //对成绩排序
        sum=sum-vec[i][0]-vec[i][k-1];      //减去最高分和最低分
        aver=sum/(k*1.0-2);               //求出最后的成绩
        vec_1.push_back(aver);         //输入
    }
    
    sort(vec_1.begin(), vec_1.end(), cmp_1);   //对每个人的最终成绩排序
    
    for(int i=vec_1.size()-m;i<vec_1.size();i++)  //输出m个非递减序列
    {
        cout<<fixed<<setprecision(3)<<vec_1[i];
        if(i!=vec_1.size()-1)
            cout<<" ";
    }
    
    return 0;
}


 
9,   8,   7,   6,   5:递减排列。
 
1,2,3,3,4,5,8,8:非递减排列,
 

关于 PTA 团体程序设计天梯赛 L2-01 的具体题目及其解答,虽然当前引用未直接提及该题目的具体内容[^1],但从以往的经验来看,L2 级别的题目通常涉及较为复杂的算法逻辑或数据结构应用。 以下是基于经验推测可能的 L2-01 类型题目及解决方案: --- ### 可能的 L2-01 题目描述 假设 L2-01 是一道与 **字符串处理** 或 **动态规划 (DP)** 相关的问题。例如,给定一段文字和若干关键词,要求统计这些关键词在文本中的出现次数,并返回按频率排序的结果列表。 #### 输入格式 - 第一行是一个正整数 N 表示关键词的数量。 - 接下来 N 行每行为一个关键词。 - 最后是一段由多个句子组成的文本。 #### 输出格式 按照关键词出现频次降序排列输出每个关键词及其对应的频次。如果频次相同,则按输入顺序输出。 --- ### 解决方案代码实现 以下提供一种 Python 实现方式来解决上述问题: ```python from collections import Counter def count_keywords(keywords, text): word_list = text.split() # 将文本拆为单词列表 counter = Counter(word_list) # 使用 Counter 统计词频 result = [] for keyword in keywords: freq = counter[keyword] result.append((keyword, freq)) # 按照频次降序排序,若频次相等则保持原输入顺序 sorted_result = sorted(result, key=lambda x: (-x[1], keywords.index(x[0]))) return sorted_result if __name__ == "__main__": n = int(input().strip()) # 关键词数量 keywords = [input().strip() for _ in range(n)] # 获取关键词 text = input().strip() # 获取文本 output = count_keywords(keywords, text) for item in output: print(f"{item[0]} {item[1]}") ``` 此代码通过 `collections.Counter` 来高效计算关键词在文本中的出现次数,并利用自定义排序规则满足题目需求[^2]。 --- ### 注意事项 1. 如果存在大小写敏感的情况,在预处理阶段可以统一转换为小写字母形式再进行匹配。 2. 对于特殊字符干扰(如标点符号),需提前清理掉无关字符以确保准确性。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值