自动统计机 c++一道基础题,不知为啥测试点有两组过不了,求大神帮忙看看代码哪里有问题。急!!
问题:奶牛们最近在学习统计学理论,但那些机械烦琐的对数据的统计分析几乎把她们搞疯了。于是奶牛们找到了你,希望你能帮帮她们。你拿到了一张写着N(1<=N<=500)个数的表...
问题:
奶牛们最近在学习统计学理论,但那些机械烦琐的对数据的统计分析几乎把她们搞疯了。于是奶牛们找到了你,希望你能帮帮她们。
你拿到了一张写着N(1<=N<=500)个数的表,表中第i个数字为Xi(−5,000<=Xi<=5000),你的任务是计算如下两个值:
所有数的平均数(所有数的和除以N)
所有数的中位数(如果N是奇数,中位数为排序后的数列里位于正中的那个;如果N是偶数,中位数是排序后的数列位于正中的两个数的平均数)
保留6位小数输出
程序名: stats
输入格式:
第1行: 1个正整数N
第2..N+1行: 第i+1为1个整数:Xi
输入样例 (stats.in):
5
12
4
6
8
2
输出样例 (stats.out):
6.400000
6.000000
我的代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<iomanip>
using namespace std;
int main(){
freopen("stats.in","r",stdin);
freopen("stats.out","w",stdout);
int n,a[20000],i,d;
double sum,m,b;
sum=0;
cin>>n;
if(n<1||n>500)return 0;
for(i=0;i<n;i++){
cin>>a[i];
sum=sum+a[i];
}
sum=sum/n;
cout<<setiosflags(ios::fixed)<<setprecision(6)<<sum<<endl;
sort(a,a+n);
if(n%2!=0){
i=n/2;
m=a[i];
cout<<setiosflags(ios::fixed)<<setprecision(6)<<m<<endl;
}else{
i=n/2-1;
d=i+1;
b=(a[d]+a[i])/2;
cout<<setiosflags(ios::fixed)<<setprecision(6)<<b<<endl;
}
return 0;
} 展开
奶牛们最近在学习统计学理论,但那些机械烦琐的对数据的统计分析几乎把她们搞疯了。于是奶牛们找到了你,希望你能帮帮她们。
你拿到了一张写着N(1<=N<=500)个数的表,表中第i个数字为Xi(−5,000<=Xi<=5000),你的任务是计算如下两个值:
所有数的平均数(所有数的和除以N)
所有数的中位数(如果N是奇数,中位数为排序后的数列里位于正中的那个;如果N是偶数,中位数是排序后的数列位于正中的两个数的平均数)
保留6位小数输出
程序名: stats
输入格式:
第1行: 1个正整数N
第2..N+1行: 第i+1为1个整数:Xi
输入样例 (stats.in):
5
12
4
6
8
2
输出样例 (stats.out):
6.400000
6.000000
我的代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<iomanip>
using namespace std;
int main(){
freopen("stats.in","r",stdin);
freopen("stats.out","w",stdout);
int n,a[20000],i,d;
double sum,m,b;
sum=0;
cin>>n;
if(n<1||n>500)return 0;
for(i=0;i<n;i++){
cin>>a[i];
sum=sum+a[i];
}
sum=sum/n;
cout<<setiosflags(ios::fixed)<<setprecision(6)<<sum<<endl;
sort(a,a+n);
if(n%2!=0){
i=n/2;
m=a[i];
cout<<setiosflags(ios::fixed)<<setprecision(6)<<m<<endl;
}else{
i=n/2-1;
d=i+1;
b=(a[d]+a[i])/2;
cout<<setiosflags(ios::fixed)<<setprecision(6)<<b<<endl;
}
return 0;
} 展开
展开全部
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<iomanip>
using namespace std;
int main(){
freopen("stats.in","r",stdin);
freopen("stats.out","w",stdout);
int n,a[20000],i,d;
double sum,m,b;
sum=0;
cin>>n;
if(n<1 || n>500) return 0;
for(i=0;i<n;i++){
cin>>a[i];
sum=sum+a[i];
}
sum=sum/n;
cout<<setiosflags(ios::fixed)<<setprecision(6)<<sum<<endl;
sort(a,a+n);
if(n%2!=0){
i=n/2;
m=a[i];
cout<<setiosflags(ios::fixed)<<setprecision(6)<<m<<endl;
}
else{
i=n/2-1;
d=i+1;
b=(double)(a[d]+a[i])/2;//这个地方要转double,因为你前面的a[d],a[i]都是int,然后/2的话,会认为是整除,但事实上并不是整除
cout<<setiosflags(ios::fixed)<<setprecision(6)<<b<<endl;
}
return 0;
}
您的程序就是这个地方出了问题。
构造一组中位数是小数的,您的就会挂。
如下面的样例:您的输出是:
3.50000
3.00000
.in:
6
1
2
3
4
5
6
.out:
3.500000
3.500000
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询