9. 假设某次比赛聘请了10位专家为选手评分,参赛选手共计2位。评分数据已知并保存在2个一维数组a1, a2中。每位选手的最终成绩计算方法是: 去掉1个最高分和1个最低分后,求剩余评分的平均值作为最终成绩。请编程计算每位选手的最终成绩。(10分)
#include <iostream>
using namespace std;
double average(int a[])
{
int j,i;
int t;
for(j=1;j<=9;j++)
for(i=1;i<=10-j;i++)
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
int m,sum=0;
float aver;
for(m=1;m<=8;m++)
{sum=sum+a[m];
cout<<sum<<“*”;//此处用于调试,但发现相加和不对
}
aver=sum/8;
return aver;
}
int main()
{
double aver1,aver2;
int a[10]={2,5,9,8,7,3,6,4,1,7};
int b[10]={1,3,5,2,3,4,5,6,1,2};
aver1=average(a);
cout<<“a的平均分为”<<aver1;
aver2=average(b);
cout<<“b的平均分为”<<aver2;
return 0;
}
谢谢!
#include <iostream>
using namespace std;
double average(int a[])
{
int j,i;
int t;
for(j=1;j<=9;j++)
for(i=1;i<=10-j;i++)
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
int m,sum=0;
float aver;
for(m=1;m<=8;m++)
{sum=sum+a[m];
cout<<sum<<“*”;//此处用于调试,但发现相加和不对
}
aver=sum/8;
return aver;
}
int main()
{
double aver1,aver2;
int a[10]={2,5,9,8,7,3,6,4,1,7};
int b[10]={1,3,5,2,3,4,5,6,1,2};
aver1=average(a);
cout<<“a的平均分为”<<aver1;
aver2=average(b);
cout<<“b的平均分为”<<aver2;
return 0;
}
谢谢!
解决方案
4
感觉是排序出错了。暂时没时间细看,先说点其他的:
1. 这个需求没必要排序。只要一次循环,把10个数求和的同时找出最大值和最小值,然后减去它俩就行了,线性复杂度,比排序简单而且快多了。
2. 两个整数运算的结果还是整数。假如想得到浮点数的结果,或改成aver=sum/8.0;或把sum定义为double类型。
3. 建议给average加一个参数作为专家的人数,把10作为参数传进去,这样更通用。
1. 这个需求没必要排序。只要一次循环,把10个数求和的同时找出最大值和最小值,然后减去它俩就行了,线性复杂度,比排序简单而且快多了。
2. 两个整数运算的结果还是整数。假如想得到浮点数的结果,或改成aver=sum/8.0;或把sum定义为double类型。
3. 建议给average加一个参数作为专家的人数,把10作为参数传进去,这样更通用。
4
假如一定要用冒泡排序,这一行改成这样就好了:
for(i=0;i<10-j;i++)
排序算法很多,适用不同情况。这个场合,用鸽巢排序或计数排序应该是最快的
for(i=0;i<10-j;i++)
排序算法很多,适用不同情况。这个场合,用鸽巢排序或计数排序应该是最快的
8
数组的起始的下标为0,但你在冒泡排序的时候,你是从1开始的,所以你漏了一个数
正确的应该是
for(i=1;i<=9;i++)
for(j=0;j<=9-i;j++)
正确的应该是
for(i=1;i<=9;i++)
for(j=0;j<=9-i;j++)
8
注意冒泡排序的下标
#include <iostream> using namespace std; double average(int a[]) { int j,i; int t; for(j=1;j<=9;j++) for(i=0;i<=9-j;i++) if(a[i]>a[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } int m,sum=0; float aver; for(m=1;m<=8;m++) {sum=sum+a[m]; cout<<sum<<"*";//此处用于调试,但发现相加和不对 } aver=sum/8; return aver; } int main() { double aver1,aver2; int a[10]={2,5,9,8,7,3,6,4,1,7}; int b[10]={1,3,5,2,3,4,5,6,1,2}; aver1=average(a); cout<<"a的平均分为"<<aver1 <<endl; aver2=average(b); cout<<"b的平均分为"<<aver2<<endl; return 0; }
4
int a[10]={2,5,9,8,7,3,6,4,1,7}; sort(a, a + 10); double arge_a = accumulate(a + 1, a + 9, 0) / 8; //arge_a = 5.0000000000000000