前言:
今天我们对“数组元素交换位置 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 ... 每日持续更新中
#头条创作挑战赛#