week1-[分支结构]中位数

week1-[分支结构]中位数

题目描述

给定 444 个正整数 a,b,c,da,b,c,da,b,c,d,输出它们的中位数,答案四舍五入保留 111 位小数。

输入格式

输入共 111 行 444 个正整数 a,b,c,da,b,c,da,b,c,d。

输出格式

输出共 111 行 111 个浮点数表示答案。

样例 #1

样例输入 #1

复制代码
3 1 2 7

样例输出 #1

复制代码
2.5

提示

样例解释 111

(2+3)÷2=2.5(2 + 3) \div 2 = 2.5(2+3)÷2=2.5。

数据范围

对于所有数据,1≤a,b,c,d≤1001\leq a,b,c,d\leq 1001≤a,b,c,d≤100。

week1-[分支结构]中位数 题解

1. 阅读题目

我们有 444 个正整数 a,b,c,da,b,c,da,b,c,d,要求输出它们的中位数 ,并且结果四舍五入保留 111 位小数。

  • 中位数定义:
    • 当数据个数为偶数时,中位数 = 中间两个数的平均值。
    • 本题有 444 个数,所以中位数 = 排序后第 2 和第 3 个数的平均值。

2. 分析问题

  • 步骤
    1. 将 444 个数存入数组。
    2. 排序。
    3. 取第 2 和第 3 个数的平均值(注意下标)。
    4. 输出保留 1 位小数(四舍五入)。
  • 数据范围很小(1≤a,b,c,d≤1001 \leq a,b,c,d \leq 1001≤a,b,c,d≤100),可以直接用排序解决。

3. 解决方案

  • sort 排序数组。
  • 平均值用 double 计算,避免整数除法丢失小数。
  • fixedsetprecision(1) 控制保留 1 位小数。

4. C++ 代码实现

c++ 复制代码
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    vector<int> nums(4);
    for (int i = 0; i < 4; i++) cin >> nums[i];

    sort(nums.begin(), nums.end());
    double median = (nums[1] + nums[2]) / 2.0;

    cout << fixed << setprecision(1) << median << "\n";
    return 0;
}

5. 数据测试

样例 1

输入

复制代码
3 1 2 7

过程

  • 排序后:1 2 3 7
  • 中位数 = (2+3)/2=2.5(2 + 3) / 2 = 2.5(2+3)/2=2.5

输出

复制代码
2.5

样例 2

输入

复制代码
10 20 30 40

过程

  • 排序后:10 20 30 40
  • 中位数 = (20+30)/2=25.0(20 + 30) / 2 = 25.0(20+30)/2=25.0

输出

复制代码
25.0

6. 时间复杂度与空间复杂度

  • 时间复杂度 :O(4log⁡4)≈O(1)O(4\log 4) \approx O(1)O(4log4)≈O(1)
  • 空间复杂度 :O(4)≈O(1)O(4) \approx O(1)O(4)≈O(1)

7. 优化方案

  • 数据量极小,本题已是最优解。
  • 如果扩展到 NNN 个数且只求中位数,可以用 nth_element 在 O(N)O(N)O(N) 时间求出中位数,无需完全排序。
相关推荐
代码游侠18 分钟前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
想进个大厂22 分钟前
代码随想录day37动态规划part05
算法
sali-tec23 分钟前
C# 基于OpenCv的视觉工作流-章22-Harris角点
图像处理·人工智能·opencv·算法·计算机视觉
子春一33 分钟前
Flutter for OpenHarmony:构建一个 Flutter 四色猜谜游戏,深入解析密码逻辑、反馈算法与经典益智游戏重构
算法·flutter·游戏
MZ_ZXD0011 小时前
springboot旅游信息管理系统-计算机毕业设计源码21675
java·c++·vue.js·spring boot·python·django·php
人道领域1 小时前
AI抢人大战:谁在收割你的红包
大数据·人工智能·算法
TracyCoder1231 小时前
LeetCode Hot100(34/100)——98. 验证二叉搜索树
算法·leetcode
A尘埃1 小时前
电信运营商用户分群与精准运营(K-Means聚类)
算法·kmeans·聚类
A星空1232 小时前
一、Linux嵌入式的I2C驱动开发
linux·c++·驱动开发·i2c
凡人叶枫2 小时前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发