用C++编写程序:编写函数mid(),计算n个人身高的中值并返回。 n个人身高中值计算方法:将n个人按身高从低到高排成一行,如果人数为偶数,则中值为中间2人的平均身高(取整数),否则就是中间那个人的身高。函数mid()的第一个参数为身高数据数组,第二个参数为人数。例如,身高数据为{190,181,182,180},则中值为181、182的平均值(181+182)/2=181
时间: 2023-07-16 14:15:10 浏览: 212
以下是mid函数的C++实现:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
int mid(int* height, int n) {
sort(height, height + n); // 对身高进行排序
if (n % 2 == 0) { // 如果人数为偶数
return (height[n/2-1] + height[n/2]) / 2; // 取中间两个人的平均身高
} else { // 如果人数为奇数
return height[n/2]; // 直接返回中间那个人的身高
}
}
int main() {
int height[] = {190, 181, 182, 180};
int n = 4;
cout << "中值为:" << mid(height, n) << endl;
return 0;
}
```
输出结果为:
```
中值为:181
```
注意,这里使用了C++标准库中的`<algorithm>`头文件中的`sort()`函数对身高进行了排序。如果你不想使用标准库,也可以自己写一个排序函数。
相关问题
c++计算时间窗口的中值
计算时间窗口的中值可以使用STL中的multiset容器来实现。具体步骤如下:
1. 将时间窗口内的所有数值存入multiset容器中;
2. 使用multiset的迭代器找到中间位置的数值;
3. 如果时间窗口长度为奇数,则中值为中间位置的数值;
4. 如果时间窗口长度为偶数,则中值为中间位置两个数值的平均值。
以下是一个示例代码:
```c++
#include <iostream>
#include <set>
using namespace std;
double findMedian(multiset<double>& window) {
int size = window.size();
auto mid = window.begin();
advance(mid, size / 2);
if (size % 2 == 0) {
auto mid2 = mid;
mid2--;
return (*mid + *mid2) / 2;
} else {
return *mid;
}
}
int main() {
multiset<double> window;
int k = 3; // 时间窗口大小
double arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
for (int i = 0; i < 9; i++) {
window.insert(arr[i]);
if (window.size() > k) {
window.erase(window.find(arr[i-k]));
}
if (window.size() == k) {
cout << "中值为:" << findMedian(window) << endl;
}
}
return 0;
}
```
上述代码中,我们使用multiset容器来存储时间窗口内的数值。在每次插入新的数值后,我们使用窗口大小k来维护multiset容器的大小,保证其始终为一个k大小的时间窗口。然后,我们调用findMedian函数来计算中值。
用C++写代码已知长度为 n 的线性表 A 中的元素是整数, 写算法求线性表中值大于 item 的元素个数。分两种情况编写函数: (1) 线性表采用顺序存储; (2) 线性表采用单链表存储。
呼叫ChitGPT,回答问题:
对于第一个问题:
(1) 若线性表采用顺序存储,可以利用二分查找算法,找到第一个大于等于item的元素位置i,然后计算线性表中元素个数n与位置i的差值,即为满足条件的元素个数。
(2) 若线性表采用单链表存储,可以遍历整个链表,对每个元素进行比较,再统计满足条件的元素个数。
您可以参考以下代码示例:
(1) 线性表采用顺序存储
int countGreater(int A[], int n, int item)
{
int low = 0, high = n - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (A[mid] <= item) low = mid + 1;
else high = mid - 1;
}
return n - low;
}
(2) 线性表采用单链表存储
int countGreater(Node* head, int item)
{
int cnt = 0;
Node* cur = head;
while (cur) {
if (cur->val > item) cnt++;
cur = cur->next;
}
return cnt;
}
阅读全文