csp 小中大 c++满分实现

本题要求结果是整数就输出整数,结果是小数,那么就输出小数,所以可以先判断一下计算结果是小数还是整数,然后分别设置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;
} 

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值