c++重庆大学 2022级-第5次作业-指针 7-5 9-13竞赛排名

7-5 9-13竞赛排名

分数 10

 

全屏浏览题目

 

切换布局

作者 吴敏华

单位 首都师范大学

有m个选手n个评委,每个评委给所有选手打分。最后得分的计算规则为去掉一个最高分,去掉一个最低分后取平均分为最后得分。要求按得分从高到低排出名次,公布获奖名单。本题要求用行指针实现。1≤m,n≤10。请务必用冒泡排序。

输入格式:

输入共m+1行,第一行是m和n两个整数,其他行是m×n个整数。

输出格式:

输出一行,表示选手编号的一种排列(用%3d格式),这种排列代表得分从高到低的选手顺序。

输入样例:

8 5
7 8 9 7 8
8 9 7 9 8
8 9 8 8 7
8 9 9 9 8
7 6 8 9 7
6 7 8 9 9
6 7 8 7 8
7 8 7 6 7

输出样例:

  4  2  3  6  1  5  7  8

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

 

#include<iostream>
using namespace std;
float FenShu(int fenshu[], int n_pingwei)//此函数包含输入过程 返回得分
{
    float defen;
    float sum = 0;
    int h_score = 0, l_score = 100;
    for (int i = 0; i < n_pingwei; i++)
    {
        cin >> fenshu[i];
    }
    for (int i = 0; i < n_pingwei; i++)
    {
        if (h_score < fenshu[i])
        {
            h_score = fenshu[i];
        }
        if (l_score > fenshu[i])
        {
            l_score = fenshu[i];
        }
    }
    for (int i = 0; i < n_pingwei; i++)
    {
        sum += fenshu[i];
    }
    defen = float((sum - h_score - l_score) / (n_pingwei - 2));
    return defen;
}
//此函数包含输入过程 返回得分

int main()
{
    float FenShu(int fenshu[], int n_pingwei);
    int m_XuanShou, n_PingWei;
    cin >> m_XuanShou
        >> n_PingWei;
    //int* ChuShiFen = new int[m_XuanShou];//指针定义动态数组
    //float* XuanShouDeFen = new float[m_XuanShou];//指针定义动态数组
    //int* PaiMing = new int[m_XuanShou];
    int ChuShiFen[100];
    float XuanShouDeFen[100];
    float DaDaoXiao[100];

    for (int i = 0; i < m_XuanShou; i++)m个选手得到m个分
    {
        XuanShouDeFen[i] = FenShu(ChuShiFen, n_PingWei);
    }
    for (int i = 0; i < m_XuanShou; i++)
    {
        DaDaoXiao[i] = XuanShouDeFen[i];
    }//复制
    // 下面冒泡
    int paixu[10] = { 1,2,3,4,5,6,7,8,9,10 };

    for (int i = 0; i < m_XuanShou - 1; i++)
    {
        for (int j = 0; j < m_XuanShou - i - 1; j++)
        {
            if (DaDaoXiao[j] < DaDaoXiao[j + 1])//前面比后面小就调换
            {
                float temp1,temp2;
                temp1 = DaDaoXiao[j];
                DaDaoXiao[j] = DaDaoXiao[j + 1];
                DaDaoXiao[j + 1] = temp1;
                temp2 = paixu[j];
                paixu[j] = paixu[j + 1];
                paixu[j + 1] = temp2;
            }
        }
    }
    1.5 2.3 7.7 4.5 xuanshoudefen
    7.7 4.5 2.3 1.5 dadaoxiao
    //for (int i = 0; i < m_XuanShou; i++)
    //{
    //    for (int j = 0; j < m_XuanShou; j++)
    //    {
    //        if (XuanShouDeFen[i] == DaDaoXiao[j])
    //        {
    //            paixu[i] = (j + 1);
    //            break;
    //        }
    //    }
    //}
    for (int i = 0; i < m_XuanShou; i++)
    {
        printf("%3d", paixu[i]);
    }
    return 0;
}
//我原来代码最大的问题
//1:函数写得不漂亮,去除一个最大值,去除两个最大值,去除一个最大值,一个第二大值.....不需要遍历来找。一步到位,通过冒泡排序,从头从尾去掉。
//无法做到名次连贯通顺,例如 分数相同的情况会出现 1 2 3 3 5 6 6 8.。。。 第四名第七名不存在,有合理性 也有局限性,比如说8不会靠成7 .
//网上学了个方法,定数表 然后用数表进行链接排序 有点cool

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值