龙空技术网

2023年12月13,每天花费一分钟练习C语言:找到数组中的多数元素

工控小新 45

前言:

今天我们对“数组元素交换位置 c语言编程”大体比较讲究,咱们都需要知道一些“数组元素交换位置 c语言编程”的相关文章。那么小编在网摘上搜集了一些有关“数组元素交换位置 c语言编程””的相关资讯,希望各位老铁们能喜欢,各位老铁们快快来了解一下吧!

学习工控知识,就来工控小新

农历十一月一日

2023/12/ 13

往期推荐

2023年12月12日,每天花费一分钟练习C语言:如何用C语言在有序矩阵中查找目标值

2023年12月11日,每天花费一分钟练习C语言:使用C语言输出中国象棋的棋盘

每日一练

/ Daily Exercises

题目:给定一个大小为n的数组,找到其中的多数元素。提示:多数元素是指在数组中出现次数大于【n/2】的元素。

题目分析

一个多数元素是指在一个大小为n的数组中出现次数大于n/2的元素。例如,数组{3, 2, 3}中的多数元素是3,因为它出现了两次,而n/2等于1.5。如果一个数组中没有多数元素,那么返回-1。

要找到数组中的多数元素,有多种方法,但是其中一种比较简单而有效的方法是使用摩尔投票算法(Moore voting algorithm)。这个算法的思想是,从数组的第一个元素开始,维护一个候选元素和一个计数器。如果当前元素和候选元素相同,那么计数器加一;如果不同,那么计数器减一。如果计数器变为零,那么更新候选元素为当前元素,并将计数器重置为一。这样,当遍历完整个数组后,候选元素就是可能的多数元素。然后,再次遍历数组,统计候选元素的出现次数,如果大于n/2,那么返回候选元素;否则,返回-1。

程序展示

// 包含头文件#include <stdio.h>// 函数原型,参数为一个整型数组和它的大小,返回值为多数元素或-1int majorityElement(int* nums, int numsSize);// 主函数int main(){    // 定义一个测试用的数组和它的大小    int nums[] = {2, 2, 1, 1, 1, 2, 2};    int numsSize = 7;    // 调用函数,得到返回值    int result = majorityElement(nums, numsSize);    // 输出结果    printf("The majority element is %d\n", result);    // 返回0,表示程序正常结束    return 0;}// 函数定义int majorityElement(int* nums, int numsSize){    // 定义候选元素和计数器    int candidate = nums[0];    int count = 1;    // 遍历数组    for (int i = 1; i < numsSize; i++)  {        // 如果当前元素和候选元素相同,计数器加一        if (nums[i] == candidate)    {            count++;        }        // 如果不同,计数器减一        else        {            count--;        }        // 如果计数器变为零,更新候选元素和计数器        if (count == 0)        {            candidate = nums[i];            count = 1;        }    }    // 再次遍历数组,统计候选元素的出现次数    count = 0;    for (int x = 0; x < numsSize; x++)  {        if (nums[x] == candidate)    {            count++;        }    }    // 如果大于n/2,返回候选元素;否则,返回-1    if (count > numsSize / 2)   {        return candidate;    }    else    {        return -1;    }}

程序测试

运行程序:

因为输入的是ums[]={2,2,1,1,1,2,2}

numsSize=7

根据公式判断则结果为2

源代码获取

#软件下载通道#

我用夸克网盘分享了「20231213」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。

链接:

(链接和提取码建议复制粘贴,手动输入容易出现错误)

#支持一下#

分享整理,测试发布不易 如果您方便的话可以帮忙点一下↓↓

谢谢大家!

下期题目

给定n (n是偶数,且n<100)个正整数,所有正整数均<10000;从前往后依次遍历这个数组,每两个为一组进行处理,若一组中的任意一个元素能被3或者5整除,则交换这两个元素的位置;否则不动;全部处理完成后,逆序输出整个数组。

例如给定序列: 99 35 8338,处理完成后得到:38 83 99 35

给定序列: 6734,处理完成后得到:3467

点赞加关注,学习不迷路

微信公众号|工控小新

EPLAN电气绘图、TIA博图基础 、CAD、C语言教学、单片机基础、三菱PLC ... 每日持续更新中

#头条创作挑战赛#

标签: #数组元素交换位置 c语言编程 #c语言如何统计数组中每个元素出现的次数 #如何输出一个数组的所有元素