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) 时间求出中位数,无需完全排序。
相关推荐
夜思红尘2 小时前
算法--双指针
python·算法·剪枝
散峰而望3 小时前
【算法竞赛】C++函数详解:从定义、调用到高级用法
c语言·开发语言·数据结构·c++·算法·github
CoderCodingNo3 小时前
【GESP】C++五级真题(贪心思想考点) luogu-B4071 [GESP202412 五级] 武器强化
开发语言·c++·算法
我有一些感想……3 小时前
An abstract way to solve Luogu P1001
c++·算法·ai·洛谷·mlp
前端小L3 小时前
双指针专题(三):去重的艺术——「三数之和」
javascript·算法·双指针与滑动窗口
智者知已应修善业4 小时前
【求等差数列个数/无序获取最大最小次大次小】2024-3-8
c语言·c++·经验分享·笔记·算法
LYFlied4 小时前
【每日算法】LeetCode 416. 分割等和子集(动态规划)
数据结构·算法·leetcode·职场和发展·动态规划
多米Domi0115 小时前
0x3f 第19天 javase黑马81-87 ,三更1-23 hot100子串
python·算法·leetcode·散列表
..过云雨5 小时前
17-2.【Linux系统编程】线程同步详解 - 条件变量的理解及应用
linux·c++·人工智能·后端
历程里程碑5 小时前
滑动窗口最大值:单调队列高效解法
数据结构·算法·leetcode