| 青年歌手大奖赛_评委会打分 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;
}