实验2.求解众数问题 给定一个整数序列,每个元素出现的次数称为重数,重数最大的元素称为众数。编写一个实验程序对递增有序序列a求众数。在c语言中写出代码
时间: 2024-10-22 14:26:54 浏览: 98
在C语言中,由于给定的序列是递增有序的,我们可以利用这个特性简化查找众数的过程。因为如果某个数字是众数,它肯定会在序列中连续出现。所以我们只需要遍历一次数组,记录当前元素和其后的元素是否都等于它,当发现第一个不相等的元素时,前面连续的元素就是众数。
以下是C语言实现的一个简单版本:
```c
#include <stdio.h>
int findMode(int arr[], int n) {
if (n == 0) return -1; // 如果数组为空,返回-1表示无众数
int mode = arr[0], count = 1;
for (int i = 1; i < n; i++) {
if (arr[i] == arr[i - 1]) { // 检查元素是否连续
count++;
} else {
if (count > 1) { // 如果之前的计数大于1,说明找到了可能的众数
// 因为数组递增,所以只要后面的元素不是该值,即可确定它是众数
if (i == n - 1 || arr[i + 1] != arr[i]) {
return arr[i];
}
}
count = 1; // 刷新计数
}
}
// 如果所有的元素都是唯一的,那么最后一个元素可能是众数
return arr[n - 1];
}
int main() {
int arr[] = {1, 2, 2, 3, 4, 5, 2}; // 示例数组
int n = sizeof(arr) / sizeof(arr[0]);
int mode = findMode(arr, n);
printf("众数是:%d\n", mode);
return 0;
}
```
阅读全文