本题要求结果是整数就输出整数,结果是小数,那么就输出小数,所以可以先判断一下计算结果是小数还是整数,然后分别设置int double类型的去接收,另外int型除以int型,不管能不能整除,不管是否用double接收,都会结果为整数,所以可以将被除数或者除数设置为double即可,如果是变量可以加上double(),如果是除2,可以直接换成2.0
思路:先排序,那么最大值和最小值就确定了,中位数即可判断n,n为偶数即为中间两数和的一半,n为奇数即为中间一个数
1.首先,用户输入了一个整数n,表示数组的大小。
2.然后,循环读取n个整数,将它们存储在数组a中。
3.使用快速排序算法(sort函数)对数组a进行排序,以便找出最大值和最小值。
4.定义了一些辅助变量来存储结果,例如minn(最小值)、maxx(最大值)、zhong(中位数的浮点数形式)和zhong1(中位数的整数形式)。
5.根据数组大小n的情况分别处理中位数:
6.如果n为偶数,即数组中元素个数为偶数,找到中间两个元素,并计算它们的平均值。如果平均值是整数,则将结果存储在zhong1中,否则存储在zhong中。
7.如果n为奇数,即数组中元素个数为奇数,直接找到中间元素,并将其存储在zhong1中。
8.最后,输出最大值maxx,中位数(取决于flag的值)和最小值minn。
#include<bits/stdc++.h>
using namespace std;
int n;
const int N=1000005;
int a[N];
bool fun(int a,int b){
return a<b;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1,fun);
int minn=a[1];
int maxx=a[n];
double zhong=0;
int zhong1=0;
int flag=0;
if(n%2==0){
int temp=n/2;
int temp1=temp+1;
if((a[temp]+a[temp1])%2==0){
flag=0;
zhong1=(a[temp]+a[temp1])/2;
}
else{
flag=1;
//下面两种计算均可
// zhong=(double(a[temp])+double(a[temp1]))/2;
zhong=(a[temp]+a[temp1])/2.0;
}
}
else{
int temp2=n/2+1;
zhong1=a[temp2];
}
cout<<maxx<<" ";
if(flag==1){
printf("%.1lf",zhong);
}
else{
cout<<zhong1;
}
cout<<" "<<minn;
return 0;
}