读书人

杭电2014 上交显示WRONG ANSWER 求下

发布时间: 2013-05-02 09:39:29 作者: rapoo

杭电2014 上交显示WRONG ANSWER 求高手指点下
Problem Description
青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。


Input
输入数据有多组,每组占一行,每行的第一个数是n(2<n<=100),表示评委的人数,然后是n个评委的打分。


Output
对于每组输入数据,输出选手的得分,结果保留2位小数,每组输出占一行。


Sample Input
3 99 98 97
4 100 99 98 97


Sample Output
98.00
98.50

我的代码:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
double a[100];
int n,i,j,t;
double score;
while(cin>>n&&n>2&&n<=100)
{
for(i=0;i<n;i++)
cin>>a[i];
for(j=1;j<=n-1;j++)
for(i=0;i<n-j;i++)
{
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
}
score=(a[1]+a[n-2])/2;
cout<<setiosflags(ios::fixed)<<setprecision(2)<<score<<endl;
}
return 0;
}
运行结果是对的 但上交时显示是错的
[解决办法]

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
double a[101];//错 double a[100];
int n,i,j,t;
double score;
while(cin>>n&&n>2&&n<=100)
{
for(i=0;i<n;i++)
cin>>a[i];
for(j=1;j<=n-1;j++)
for(i=0;i<n-j;i++)
{
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
}

//错 score=(a[1]+a[n-2])/2;
for (score=0.0,j=1; j<n-1; j++) score += a[j];
score /= (n-2);

cout<<setiosflags(ios::fixed)<<setprecision(2)<<score<<endl;
}
return 0;
}

[解决办法]

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
double a[100];
int n,i,j,t;
double score;
while(cin>>n&&n>2&&n<=100)
{
for(i=0;i<n;i++)
cin>>a[i];
for(j=1;j<=n-1;j++)
{
for(i=0;i<n-j;i++)
{
if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;}
}
}
//是去掉最高和最低后的平均分。。不是第二跟倒数第二的平均分。。
for(score = 0, i = 1; i <= n - 2; ++i) score += a[i];
score /= (n-2);
//score=(a[1]+a[n-2])/2;
cout<<setiosflags(ios::fixed)<<setprecision(2)<<score<<endl;
}
return 0;
}

读书人网 >C++

热点推荐