杭电 2014 C语言 怎么就是不对呢?
补充:#include <stdio.h>
main()
{
int a,ah[100],max,min,t,i;
float sum,pra;
while((scanf("%d",&a)!=EOF)&&(a>2&&a<=100))
{
sum=0;
for(i=0;i<a;i++)
scanf("%d",&ah[i]);
max=ah[0];
min=ah[a-1];
for(i=0;i<a;i++)
{
if(ah[i]>max)
{
t=max;
max=ah[i];
ah[i]=t;
}
if(ah[i]<min)
{
t=min;
min=ah[i];
ah[i]=t;
}
}
for(i=0;i<a;i++)
sum=sum+ah[i];
pra=1.0*(sum-max-min)/(a-2);
printf("%.2f\n",pra);
}
}
追问:青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。
输入数据有多组,每组占一行,每行的第一个数是n(2<n<=100),表示评委的人数,然后是n个评委的打分。
对于每组输入数据,输出选手的得分,结果保留2位小数,每组输出占一行。
答案:按你的思路该的
#include <stdio.h>
void main()
{
int a,ah[100],max,min,i;
float sum=0,pra;scanf("%d",&a);
while(a<2&&a>100) //!!!!while的功能是判断输入的合法性的,没必要把后面处理过程都包在循环体内。
{scanf("%d",&a);}
for(i=0;i<a;i++)
scanf("%d",&ah[i]);
max=ah[0];
min=ah[a-1];
for(i=0;i<a;i++)
{
if(ah[i]>max)
max=ah[i];//!!你求的是最大值,用max记录即可,你编的是交换元素,求最小值也是这样改
if(ah[i]<min)
min=ah[i];
}
for(i=0;i<a;i++)
sum=sum+ah[i];
pra=1.0*(sum-max-min)/(a-2);
printf("%.2f\n",pra);
}
其他:您要把程序的设计的功能也贴在这里,人家才有可能看得懂。 还是看下AC码吧:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{ int n,k,i,a[101];
double s;
while(cin>>n&&n>2&&n<=100)
{ k=n;s=0;
while(n--)
cin>>a[n];
sort(a,a+k);
for(i=1;i<k-1;i++)
s+=a[i];
s/=k-2;
printf("%.2lf\n",s);
}
return 0;
} max和min都从ah[0]开始取吧,没必要交换,直接赋值,求和也可以写在求最大最小的循环哩。 if(ah[i]>max)
{
t=max;
max=ah[i];
ah[i]=t;
}
if(ah[i]<min)
{
t=min;
min=ah[i];
ah[i]=t;
}
这部分错了,加入你输入6 77 79 88 65 78 90,你的结果是83.50,可是实际应该是(77+79+78+88)/4=80.50;
错在了:你是吧max初始时定为:ah[0],但后来找到比max更大的ah[i],然后你把ah[i]和max交换了,导致ah[i]=ah[0],所以这组数据中ah[i]就消失了,ah[0]多出来一个,从而导致数据错误。
你改成
for (i=0;i<a;i++)
{
if (ah[i]>max)
{
max=ah[i];
}
if (ah[i]<min)
{
min=ah[i];
}
}
这样就不会对原来的数据进行改变,结果就对了。
上一个:求C语言改错 将其改完后的代码发过来 让我好好看看 谢谢 这个代码是说输入10个数先排序然后插入一个数在排
下一个:什么是C语言啊?谁能告诉我啊!教教我啊!