当前位置:编程学习 > C/C++ >>

杭电 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语言啊?谁能告诉我啊!教教我啊!

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,