[总结]hdoj2014

本文介绍了一种通过C++实现的计算一组分数平均值的方法,排除最高和最低分的影响。文章对比了不同变量作用域、数据类型转换及循环内的效率问题,并提供了一个优化后的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.!=EOF可以防止时间超出,但是不能用于cin,可用于scanf。

2.在for循环里面声明的变量属于局部变量,在循环外不能生效。所以,在循环外先定义 int min,max 。循环里更改值。

3.把int型数据传入到float中报错,方便起见,我把涉及到的类型全都改为float。

4.score[min]应为min。

5.分清什么不要循环,防止在循环体内运算多次,造成错误。

如,sum中 -min-max错写在for里,被减了好多次。

6.简洁起见,把求min和max的两个循环应写在一个循环里面。

7.min,max的赋值第一次写在了for循环里,造成每次求好的min都被赋值为score[0],用逐侦调试我才发现的。


ac的

#include <iostream>
using namespace std;
int main()
{
	float score[100];
	float max;
	float min;
	int n;
	
	while(scanf("%d",&n)!=EOF) 
	{
	
		
		for(int i=0;i<n;i++)
		{
			cin>>score[i];
		}//输入分数			
		
		min=score[0];
		max=score[0];
		
		for(int x=1;x<n;x++)
		{
		

			if(score[x]<=min)
			{
				min=score[x];
			}
			if(score[x]>=max)
			{
			max=score[x];
			}
		}//求最小,大值

		float sum1=0;
		for(i=0;i<n;i++)
		{
			sum1=sum1+score[i];
		}
		float sum=sum1-min-max;
		float average;
		average=sum/(n-2);
		printf("%.2f\n",average);
	}

	return 0;
}

第一次未经调试的代码

#include <iostream>
using namespace std;

int main()
{
int score[100];
int max=0;
int min=0;
int n;

while(cin>>n)
{


for(int i=0;i<n;i++)
{
cin>>score[i];
}//输入分数

for(int x=1;x<=n;x++)
{
if(score[x]<=score[min])
{
score[min]=score[x];
}
}//求最小值



for(int y=1;y<=n;y++)
{
if(score[y]<=score[max])
{
score[max]=score[y];
}
}//求最大值

double sum=0;
for(i=0;i<n;i++)
{
sum=sum+score[i]-score[min]-score[max];
}
double average;
average=sum/(n-2);
printf("%.2f\n",average);
}

return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值