求帮助一道C++题目,不知道本人错在哪里了

C++语言 码拜 9年前 (2016-04-12) 846次浏览
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;
}
谢谢!
解决方案

4

感觉是排序出错了。暂时没时间细看,先说点其他的:
1. 这个需求没必要排序。只要一次循环,把10个数求和的同时找出最大值和最小值,然后减去它俩就行了,线性复杂度,比排序简单而且快多了。
2. 两个整数运算的结果还是整数。假如想得到浮点数的结果,或改成aver=sum/8.0;或把sum定义为double类型。
3. 建议给average加一个参数作为专家的人数,把10作为参数传进去,这样更通用。

4

假如一定要用冒泡排序,这一行改成这样就好了:
for(i=0;i<10-j;i++)
排序算法很多,适用不同情况。这个场合,用鸽巢排序或计数排序应该是最快的

8

数组的起始的下标为0,但你在冒泡排序的时候,你是从1开始的,所以你漏了一个数
正确的应该是
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

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求帮助一道C++题目,不知道本人错在哪里了
喜欢 (0)
[1034331897@qq.com]
分享 (0)