教材:

一、模拟策略

第四章:阅读程序 - 图1

二、字符处理

三、枚举

判断回文

  1. bool is_plalindrome(string s){
  2. int size = s.size();
  3. for(int i = 0 ; i < size;i++){
  4. if(s[i] != s[size-1 - i]){
  5. return false;
  6. }
  7. }
  8. return true ;
  9. }

排序算法

给定两个有序数列,合并成一个新的升序数列。

中位数频率

  1. int main(){
  2. int n, i, sum, x, a[SIZE]; // 声明变量:n(输入个数),i(循环索引),sum(累积频率),x(临时存储输入值),a[SIZE](频率数组)
  3. cin >> n; // 读取输入数据的个数 n
  4. memset(a, 0, sizeof(a)); // 初始化数组 a 的所有元素为 0,准备计数
  5. for (i = 1; i <= n; i++) { // 循环 n 次,读取输入数据(注意:这里 i 从 1 开始,但输入值 x 不一定与 i 相关)
  6. cin >> x; // 读取一个输入值 x
  7. a[x]++; // 将 a[x] 的值加 1,统计 x 的出现频率
  8. }
  9. i = 0; sum = 0; // 重置 i 和 sum,为累加阶段做准备
  10. while (sum < (n/2 + 1)) { // 循环条件:sum 小于 (n/2 + 1)(整数除法,例如 n=5 时,5/2=2,2+1=3)
  11. i++; // 递增 i(从 1 开始,依次检查每个值)
  12. sum += a[i]; // 将 a[i] 的值累加到 sum(sum 表示从 1 到 i 的累积频率)
  13. }
  14. cout << i << endl; // 输出满足条件的 i(即中位数)
  15. return 0;
  16. }

代码功能分析

您提供的 C++ 代码是一个计算输入数据的中位数的程序。具体来说,它读取一组整数,统计每个值的出现频率,然后通过累加频率找到中位数对应的值。中位数定义为第 ⌈(n+1)/2⌉ 小的值(即当 n 为奇数时是唯一中位数,当 n 为偶数时是上中位数)。下面我将详细解释代码的功能、逻辑和注意事项。

代码整体逻辑

输入处理与初始化:读取整数 n(输入数据的个数),初始化一个数组 a 用于计数每个输入值的频率。

频率统计:读取 n 个整数,使用数组 a 记录每个值出现的次数。

中位数计算:通过累加频率数组 a,找到最小的整数 i,使得从 1 到 i 的值的累积频率首次达到或超过 n/2+1(使用整数除法)。输出这个 i,即为中位数。