顺序表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;
}
posted @ 2025-03-06 14:32  一点都不无聊  阅读(307)  评论(0)    收藏  举报