教材:
一、模拟策略
二、字符处理
三、枚举
判断回文
bool is_plalindrome(string s){
int size = s.size();
for(int i = 0 ; i < size;i++){
if(s[i] != s[size-1 - i]){
return false;
}
}
return true ;
}
排序算法
给定两个有序数列,合并成一个新的升序数列。
中位数频率
int main(){
int n, i, sum, x, a[SIZE]; // 声明变量:n(输入个数),i(循环索引),sum(累积频率),x(临时存储输入值),a[SIZE](频率数组)
cin >> n; // 读取输入数据的个数 n
memset(a, 0, sizeof(a)); // 初始化数组 a 的所有元素为 0,准备计数
for (i = 1; i <= n; i++) { // 循环 n 次,读取输入数据(注意:这里 i 从 1 开始,但输入值 x 不一定与 i 相关)
cin >> x; // 读取一个输入值 x
a[x]++; // 将 a[x] 的值加 1,统计 x 的出现频率
}
i = 0; sum = 0; // 重置 i 和 sum,为累加阶段做准备
while (sum < (n/2 + 1)) { // 循环条件:sum 小于 (n/2 + 1)(整数除法,例如 n=5 时,5/2=2,2+1=3)
i++; // 递增 i(从 1 开始,依次检查每个值)
sum += a[i]; // 将 a[i] 的值累加到 sum(sum 表示从 1 到 i 的累积频率)
}
cout << i << endl; // 输出满足条件的 i(即中位数)
return 0;
}
代码功能分析
您提供的 C++ 代码是一个计算输入数据的中位数的程序。具体来说,它读取一组整数,统计每个值的出现频率,然后通过累加频率找到中位数对应的值。中位数定义为第 ⌈(n+1)/2⌉ 小的值(即当 n 为奇数时是唯一中位数,当 n 为偶数时是上中位数)。下面我将详细解释代码的功能、逻辑和注意事项。
代码整体逻辑
输入处理与初始化:读取整数 n(输入数据的个数),初始化一个数组 a 用于计数每个输入值的频率。
频率统计:读取 n 个整数,使用数组 a 记录每个值出现的次数。
中位数计算:通过累加频率数组 a,找到最小的整数 i,使得从 1 到 i 的值的累积频率首次达到或超过 n/2+1(使用整数除法)。输出这个 i,即为中位数。