求解众数问题 给定一个整数序列,每个整数出现的次数称为出现的重数,重数最大的整数称为众数,如: S={1,2,2,2,3,5},1的重数是1,2的重数是3,3的重数是1,5的重数是1,众数是2。请 分治法设计一个程序求解之。 用c++编写,在c99模式下编写
时间: 2024-06-01 10:14:25 浏览: 94
c++分治法求解众数问题
5星 · 资源好评率100%
以下是用分治法设计的求解众数问题的程序,使用C语言编写:
#include <stdio.h>
int find_majority(int arr[], int left, int right) {
if (left == right) {
return arr[left];
}
int middle = (left + right) / 2;
int left_majority = find_majority(arr, left, middle);
int right_majority = find_majority(arr, middle + 1, right);
if (left_majority == right_majority) {
return left_majority;
}
int left_count = 0;
int right_count = 0;
for (int i = left; i <= right; i++) {
if (arr[i] == left_majority) {
left_count++;
} else if (arr[i] == right_majority) {
right_count++;
}
}
if (left_count > right_count) {
return left_majority;
} else {
return right_majority;
}
}
int main() {
int arr[] = {1, 2, 2, 2, 3, 5};
int n = sizeof(arr) / sizeof(arr[0]);
int majority = find_majority(arr, 0, n - 1);
printf("The majority is: %d\n", majority);
return 0;
}
当输入这个问题时,AI会执行上述程序,得出结果为 "The majority is: 2"。
阅读全文