c语言实现找出数组中出现次数最多的元素

这道题的来源是一年的统考考研数据结构题,我还找了半天,没找到是哪一年的。然后这个的话,我看了一下答案感觉他那个思路不是很好理解,然后我就看到了这个思路,发现思路得很好,值的积累。

??这里的话就是重新创建了一个新的数组b,将其置为0,扫描一遍原数组a,如果比如原数组为{3,3,2,2,4,4,6,4,4},当扫描第一个的时候,在b数组第三个位置的下标加一,也就是b[3] = 1;以此类推,到最后b[2] = 2 b[3] = 2 b[4] = 4 b[6] = 1 ,此时扫描一下b数组,找出值最大的,即为愿数组中出现次数最多的元素。

下面的算法实现了找到最多的元素,然后,判断是否次数大于数组总元素的一半,如果大于就找到了,不大于,就没找到

#include<stdio.h>
#define MAX 10
#define true 1
#define false 0

//怎样过滤掉数组中的0

//找一个数组中出现次数最多的元素,并判断是否大于总元素一半多




void find_more(int a[],int n)
{
	int point,times = 0,max; 
	int b[MAX] = {0};
	for(int i = 0; i < n ; i++)
	{
		point = a[i];
		b[point]++;
	}



	for(int j = 0; j < MAX ; j++)
	{ //time千万不能在这里面赋值,不然会每一次把times置为0了
		if(b[j] > times)
		{
			max = j;
			times = b[j];
		}

	}

	
	if(times > n/2)
		printf("存在%d,次数为:%d\n", max,times);
	else
		printf("不存在\n");
}

int main(int argc, char const *argv[])
{
	int a[9] = {3,4,5,7,5,3,3,3,8};
	find_more(a,9);
	
	return 0;
}

在这里插入图片描述

C语言中,要定义一个函数`Count`输出一个字符数组中出现次数最多的字母,我们首先需要理解这个任务的目标和限制条件。由于C语言中的字符数组(字符串)可能包含多个字母,并且可能存在大小写之分,我们需要确定如何处理这些情况。一个常见的方法是将所有字母转换为同一种大小写(通常是小写),然后统计每个字母出现次数,最后输出出现次数最多的那个字母。以下是一个可能的实现方法: ```c #include <stdio.h> #include <string.h> #include <ctype.h> // 函数声明 void Count(const char *str); int main() { char str[] = "Hello World!"; Count(str); return 0; } void Count(const char *str) { int len = strlen(str); int count[26] = {0}; // 用于统计26个字母出现次数 int i, max_count = 0; char max_char = 'a'; // 将所有字符转为小写 for(i = 0; i < len; i++) { if (str[i] >= 'A' && str[i] <= 'Z') { str[i] += 'a' - 'A'; // 转换为小写 } } // 统计每个字母出现次数 for(i = 0; i < len; i++) { if (str[i] >= 'a' && str[i] <= 'z') { count[str[i] - 'a']++; } } // 查找出次数最多的字母 for(i = 0; i < 26; i++) { if (count[i] > max_count) { max_count = count[i]; max_char = 'a' + i; } } printf("出现次数最多的字母是: %c\n", max_char); } ``` 这段代码中,`Count`函数首先统计输入字符串中每个字母出现次数,然后找出出现次数最多的那个字母并打印出来。在统计时,我们通过将大写字母转换为小写来忽略大小写的差异。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五月的天气

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值