顺序表3:2014-青年歌手大奖赛_评委会打分
题目链接
https://acm.hdu.edu.cn/showproblem.php?pid=2014
Problem Description
青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。
Input
输入数据有多组,每组占一行,每行的第一个数是n(2<n<=100),表示评委的人数,然后是n个评委的打分。
Output
对于每组输入数据,输出选手的得分,结果保留2位小数,每组输出占一行。
Sample Input
3 99 98 97
4 100 99 98 97
Sample Output
98.00
98.50
点击查看代码
#include<iostream>
using namespace std;
#define eleType double
struct SequectialList {
eleType* elements;
int size;
int capacity;
};
// 初始化
void initializeList(SequectialList* list, int capacity) {
list->elements = new eleType[capacity];
list->size = 0;
list->capacity = capacity;
}
// 销毁
void destroyList(SequectialList* list) {
delete[] list->elements;
}
// 获取顺序表大小
int size(SequectialList* list) {
return list->size;
}
// 是否为空
bool isEmpty(SequectialList* list) {
return list->size == 0; // 空:1,非空:0
}
// 插入元素
void insert(SequectialList* list, int index, eleType element) {
if (index<0 || index>list->size) {
throw std::invalid_argument("Invalid index");
}
if (list->size == list->capacity) {
int newCapacity = list->capacity * 2;
eleType* newElements = new eleType[newCapacity];
for (int i = 0; i < list->size; ++i) {
newElements[i] = list->elements[i];
}
delete[] list->elements;
list->elements = newElements;
list->capacity = newCapacity; // 扩容
}
for (int i = list->size; i > index; --i) {
list->elements[i] = list->elements[i - 1];
}
list->elements[index] = element;
list->size++;
}
// 删除元素
void deleteElement(SequectialList* list, int index) {
if (index < 0 || index >= list->size) {
throw std::invalid_argument("Invalid index");
}
for (int i = index; i < list->size - 1; ++i) {
list->elements[i] = list->elements[i + 1];
}
list->size--;
}
// 根据元素值找下标
int findElements(SequectialList* list, eleType element) {
for (int i = 0; i < list->size; ++i) {
if (list->elements[i] == element) {
return i; // 找到返回下标
}
}
return -1; // 没找到返回 -1
}
// 根据索引找值
eleType getElement(SequectialList* list, int index) {
if (index < 0 || index >= list->size) {
throw std::invalid_argument("Invalid index");
}
return list->elements[index];
}
// 元素修改
void updateElement(SequectialList* list, int index, eleType value) {
if (index < 0 || index >= list->size) {
throw std::invalid_argument("Invalid index");
}
list->elements[index] = value;
}
int main() {
int n;
while (cin >> n) {
SequectialList s;
initializeList(&s, 1);
for (int i = 0; i < n; ++i) {
eleType x;
cin >> x;
insert(&s, i, x);
}
eleType eMax = -1000000, eMin = 1000000000;
eleType eSum = 0;
for (int i = 0; i < size(&s); ++i) {
eleType ele = getElement(&s, i);
if (ele > eMax)eMax = ele;
if (ele < eMin)eMin = ele;
eSum += ele;
}
eSum -= eMax;
eSum -= eMin;
eSum /= (n - 2);
printf("%.2lf\n", eSum);
}
return 0;
}

浙公网安备 33010602011771号