以下是使用C语言实现的代码,其中假设输入的一组数存储在数组中:

#include <stdio.h>

int main() {
    int nums[] = {1, 2, 3, 2, 4, 3, 4, 4, 5}; // 示例输入的一组数
    int n = sizeof(nums) / sizeof(nums[0]); // 数组长度
    int max1 = 0, max2 = 0; // 记录出现次数最多和第二多的数
    int count1 = 0, count2 = 0; // 记录最多和第二多的数出现的次数

    for (int i = 0; i < n; i++) {
        if (nums[i] == max1) { // 如果当前数等于最多的数,则最多的数出现次数加1
            count1++;
        } else if (nums[i] == max2) { // 如果当前数等于第二多的数,则第二多的数出现次数加1
            count2++;
        } else if (count1 == 0) { // 如果最多的数还没有出现过,则将当前数作为最多的数
            max1 = nums[i];
            count1 = 1;
        } else if (count2 == 0) { // 如果第二多的数还没有出现过,则将当前数作为第二多的数
            max2 = nums[i];
            count2 = 1;
        } else { // 如果当前数既不等于最多的数也不等于第二多的数,则更新最多的数和第二多的数
            count1--;
            count2--;
        }
    }

    printf("出现次数最多的数是%d,出现了%d次\n", max1, count(nums, n, max1));
    printf("出现次数第二多的数是%d,出现了%d次\n", max2, count(nums, n, max2));

    return 0;
}

// 计算某个数在数组中出现的次数
int count(int nums[], int n, int x) {
    int cnt = 0;
    for (int i = 0; i < n; i++) {
        if (nums[i] == x) {
            cnt++;
        }
    }
    return cnt;
}

在上面的代码中,我们使用了一个类似于摩尔投票法的算法来找出出现次数最多和第二多的数。具体思路是,我们用两个变量max1max2分别记录出现次数最多和第二多的数,用两个变量count1count2分别记录它们在数组中出现的次数。我们遍历数组中的每个数,如果当前数等于max1,则count1加1;如果当前数等于max2,则count2加1;如果当前数既不等于max1也不等于max2,则将count1count2都减1。这样,我们在遍历完整个数组之后,max1max2就分别存储了出现次数最多和第二多的数,而count1count2分别存储了它们在数组中出现的次数。最后,我们可以调用count函数来计算它们在数组中的实际出现次数,并输出结果

使用c语言求一组数中出现次数最多和第二多的两个数

原文地址: https://www.cveoy.top/t/topic/e9aM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录