用c++设计程序,把一个数组的0等概率换成1~m,排序后计算ak的数的期望
时间: 2023-05-29 14:02:10 浏览: 104
要实现这个程序,我们需要使用以下步骤:
1. 读取数组元素个数n和0被替换成的最大值m。
2. 声明一个长度为n的整型数组,并用随机数生成器将其填充为0或1。
3. 遍历该数组,将每个0替换为1-M之间的任意一个整数。
4. 对原始数组和修改后的数组进行快速排序。
5. 遍历排序后的数组,统计出现次数最多的元素ak。
6. 计算ak出现的次数除以n,得到ak的期望值。
下面是使用C语言实现此程序的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_M 100
// 生成1到m之间的随机整数
int random_int(int m) {
return rand() % m + 1;
}
// 交换数组中两个元素的值
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 快速排序
void quick_sort(int *arr, int left, int right) {
if (left >= right) return;
int i = left, j = right, pivot = arr[left];
while (i < j) {
while (i < j && arr[j] >= pivot) j--;
if (i < j) arr[i++] = arr[j];
while (i < j && arr[i] < pivot) i++;
if (i < j) arr[j--] = arr[i];
}
arr[i] = pivot;
quick_sort(arr, left, i - 1);
quick_sort(arr, i + 1, right);
}
// 计算ak的期望值
double calc_expectation(int *arr, int n, int ak) {
int count = 0;
for (int i = 0; i < n; i++) {
if (arr[i] == ak) count++;
}
return (double)count / n;
}
int main() {
int n, m, arr[MAX_M], modified[MAX_M];
double sum = 0.0;
// 读取数组大小和0被替换成的最大值
printf("Enter array size and maximum value of modified 0s: ");
scanf("%d%d", &n, &m);
// 初始化随机数生成器
srand(time(NULL));
// 填充原始数组并进行修改
for (int i = 0; i < n; i++) {
arr[i] = rand() % 2;
if (arr[i] == 0) arr[i] = random_int(m);
}
// 复制数组并排序
for (int i = 0; i < n; i++) {
modified[i] = arr[i];
}
quick_sort(arr, 0, n - 1);
quick_sort(modified, 0, n - 1);
// 找到出现次数最多的元素ak
int ak = modified[n-1], count = 1, max_count = 1;
for (int i = n - 2; i >= 0; i--) {
if (modified[i] == ak) {
count++;
} else {
if (count > max_count) {
max_count = count;
ak = modified[i+1];
}
count = 1;
}
}
if (count > max_count) {
max_count = count;
ak = modified[0];
}
// 计算ak出现的期望值
sum = calc_expectation(arr, n, ak);
// 输出结果
printf("The original array is:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
printf("The modified array is:\n");
for (int i = 0; i < n; i++) {
printf("%d ", modified[i]);
}
printf("\n");
printf("The number with highest frequency is %d\n", ak);
printf("The expectation of this number's occurrence is %f\n", sum);
return 0;
}
```
阅读全文