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