用c语言和递归实现众数问题
时间: 2023-05-23 14:04:49 浏览: 163
A:众数问题指的是在一个数组中出现次数最多的元素,可以使用C语言和递归来解决该问题。
首先,定义一个函数来实现众数问题:
```
int getMode(int arr[], int n) {
int mode = arr[0], count = 1, maxCount = 1;
for (int i = 1; i < n; i++) {
if (arr[i] == mode)
count++;
else {
if (count > maxCount) {
maxCount = count;
mode = arr[i - 1];
}
count = 1;
}
}
return (count > maxCount) ? arr[n-1] : mode;
}
```
该函数的作用是使用循环来计算数组中出现次数最多的元素。然后,在主函数中,可以使用递归来不断缩小数组的范围,直到数组中只有一个元素。
```
#include <stdio.h>
int getMode(int arr[], int n);
int main() {
int arr[] = {1, 2, 3, 4, 5, 5, 5, 6, 6, 7, 8};
int n = sizeof(arr) / sizeof(arr[0]);
int mode = getMode(arr, n);
printf("The mode is: %d", mode);
return 0;
}
int getMode(int arr[], int n) {
if (n == 1)
return arr[0];
int left = getMode(arr, n / 2);
int right = getMode(arr + n / 2, n - n / 2);
int leftCount = 0, rightCount = 0;
for (int i = 0; i < n; i++) {
if (arr[i] == left)
leftCount++;
else if (arr[i] == right)
rightCount++;
}
return (leftCount > rightCount) ? left : right;
}
```
该程序的输出应该是:"The mode is: 5",这是因为数组中出现次数最多的元素是“5”。
阅读全文