一:利用数据结构顺序表的曾删改查实现:青年歌手大奖赛_评委会打分
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>
#include <stdexcept>
using namespace std;
#define eleType double
struct SqueList{
eleType *elements;
int size;
int capacity;
};
//初始化表
void InitSqueList(SqueList *list,int capacity){
list->elements=new eleType[capacity];
list->size=0;
list->capacity=capacity;
}
//删除表
void deleteSqueList(SqueList *list){
delete [] list->elements;
}
//获得表长度
int size(SqueList *list){
return list->size;
}
//判断表非空
int isElep(SqueList *list){
return list->size==0;
}
//插入数据
void insert(SqueList *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 deleteelements(SqueList *list,int index){
if(index<0 || index>=list->size){
throw std::invalid_argument("Invalid argument");
}
for(int i=index;i<list->size-1;++i){
list->elements[i]=list->elements[i+1];
}
list->size --;
}
//更新数据
void updataelements(SqueList *list,int index,eleType element){
list->elements[index]=element;
}
//查找数据并返回下标,否则返回 -1
int findelements(SqueList *list,eleType element){
for(int i=0;i<list->size-1;++i){
if(list->elements[i] == element)
return i;
}
return -1;
}
//索引数据
eleType Get_elements(SqueList *list,int index){
return list->elements[index];
}
int main(){
int n;
while(cin>>n){
SqueList s;
InitSqueList(&s,1);
for(int i=0;i<n;++i){
eleType x;
cin>>x;
insert(&s,i,x);
}
eleType Pmax=-10000000,Pmin=10000000;
eleType cs,Sum=0,average=0;
for(int i=0;i<size(&s);++i){
cs=Get_elements(&s,i);
if(cs>Pmax) Pmax=cs;
if(cs<Pmin) Pmin=cs;
Sum+=cs;
}
average=(Sum-Pmax-Pmin)/(n-2);
printf("%.2lf\n",average);
}
return 0;
}
二:利用数据结构顺序表的曾删改查实现:数值统计
Problem Description
统计给定的n个数中,负数、零和正数的个数。
Input
输入数据有多组,每组占一行,每行的第一个数是整数n(n<100),表示需要统计的数值的个数,然后是n个实数;如果n=0,则表示输入结束,该行不做处理。
Output
对于每组输入数据,输出一行a,b和c,分别表示给定的数据中负数、零和正数的个数。
Sample Input
6 0 1 2 3 -1 0
5 1 2 3 4 0.5 0
Sample Output
1 2 3 0 0 5
int main()
{
int n;
while(cin>>n&&n)
{
SqueList sx;
InitSqueList(&sx,1);
for(int i=0;i<n;++i)
{
eleType x;
cin>>x;
insert(&sx,i,x);
}
eleType cs;
int zf=0,ze=0,zz=0;
for(int i=0;i<n;i++)
{
cs=Get_elements(&sx,i);
if(cs<-1e-8){
zf++;
}
else if(cs>1e-8){
zz++;
}
else {
ze++;
}
}
cout<<zf<<" "<<ze<<" "<<zz<<endl;
}
}