#C++ Day40 Basic Data Structure Chapter3  November 26 2025

青年歌手大奖赛_评委会打分 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 183698    Accepted Submission(s): 89947

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  
Author lcy  
Source C语言程序设计练习(三)

#include <iostream>

using namespace std;

#define eleType double

#include <iomanip>

//1.

struct SequentialList {

eleType* elements;

int capacity;

int size;

};

//2.initial

void initializeList(SequentialList * list,int capacity){

list->elements = new eleType[capacity];

list->capacity = capacity;

list->size = 0;

}

//3.Is Empty

bool isEmpty(SequentialList* list) {

return list->size == 0;

}

int sizeOfList(SequentialList* list) {

return list->size;

}

//4.destroy

void destroyList(SequentialList* list) {

delete[] list->elements;

}

//5.insert

void insertElement(SequentialList* 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* newList = new eleType[newCapacity];

for (int i = 0; i < list->size; ++i) {

newList[i] = list->elements[i];

}

delete[] list->elements;

list->elements = newList;

list->capacity = newCapacity;

}

for (int i = list->size; i > index; –i) {

list->elements[i] = list->elements[i – 1];

}

list->elements[index] = element;

list->size++;

}

//6.delete

void deleteElement(SequentialList* 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–;

}

//7.find

int findElementIndex(SequentialList* list, eleType element) {

for (int i = 0; i < list->size; i++) {

if (list->elements[i] == element) {

return i;

}

}

return -1;

}

//8.get

eleType getElement(SequentialList* list, int index) {

if (index < 0 || index >= list->size)

{

throw std::invalid_argument(“invalid index”);

}

return list->elements[index];

}

//9.update

void updateElement(SequentialList* list, int index, eleType element) {

if (index < 0 || index >= list->size)

{

throw std::invalid_argument(“invalid index”);

}

list->elements[index] = element;

}

int main() {

SequentialList s;

int n;

cout << setiosflags(ios::fixed) << setprecision(2);

while (cin >> n && n > 2 && n <= 100) {

initializeList(&s, 1);

for (int i = 0; i < n; ++i) {

eleType x;

cin >> x;

insertElement(&s,i,x);

}

double max= getElement(&s, 0), min=getElement(&s,0);

for (int i = 1; i < n; ++i) {

if(getElement(&s,i)<min) {

min = getElement(&s, i);

}

if (getElement(&s, i) > max) {

max = getElement(&s, i);

}

}

int maxindex = findElementIndex(&s, max);

deleteElement(&s, maxindex);

int minindex = findElementIndex(&s, min);

deleteElement(&s, minindex);

double sum = 0;

for (int i = 0; i < n – 2; ++i) {

sum += getElement(&s, i);

}

double avg = 0;

if (n – 2 == 1) {

avg= getElement(&s, 0);

}

else{

avg= sum / (n – 2);

}

cout << avg << endl;

}

return 0;

}