当前位置:首页 » 编程语言 » c语言一组整数出现次数最多的数
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言一组整数出现次数最多的数

发布时间: 2023-08-06 13:26:56

⑴ 在c语言中,输入几个数字,怎样输出其中出现最多的数字,并且输出数字出现的最大次数

#include<stdio.h>
intmain(){
intn=10;
inta[10]={1,2,3,4,4,4,5,5,5,5};
intb[10],len=0,count[10];
inti,j,max=0;
for(i=0;i<n;i++){
for(j=0;j<len;j++){
if(a[i]==b[j]){
count[j]++;
break;
}
}
if(j==len){
b[len]=a[i];
count[len]=1;
len++;
}
}
for(j=1;j<len;j++)
if(count[j]>count[max])
max=j;
printf("max=%d,times=%d ",b[max],count[max]);

return0;
}

⑵ c语言:如果有一大堆数,怎么找出其中出现次数最多的那个

数据结构:用一个可变长度的动态结构数组(结构类型中有两个成员,一是被统计的数,另一是这个数出现的频次),或用两个整形数组,或动态表。

算法思路:

  1. 对于每个要统计的数,首先看是不是已存在于数组中,如果在,其对应的频次数加1;如果不在,添在数组中,频次数为1。

  2. 由于这一大堆数的组成是未知的(如,有100个数,其中3有10个,9有80个,54有10个,那么结果只要用数组中的三个元素就保存了,频次最高的是9;但也有另一种可能:1~100中每个数都出现一次,那就要100个元素了),同时这一大堆数的总个数也是未知的,所以要考虑可变长度的动态存储结构,首选就是动态链表了。当然也可以考虑动态数组,一开始数组有个初始大小(如100),运行时如果不够大,则在原数组大小基础上增加一定长度(如100)建立新数组,将原数组复制到新数组,删除原数组。

  3. 统计完成后,在数组中查找频次最大的元素即可。

下述参考程序,用结构数组实现。

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <memory.h>

struct Node {
int item; //数据
int freq; //出现次数
};

struct List {
struct Node* data;
int occupied; //被占用的数
int size; //空间总数
};

void statistic(struct List* , int );
struct Node maxFreq(struct List*);

void main() {

//准备数据结构并初始化
struct List dataList;
dataList.data =(struct Node*) malloc(100 * sizeof (struct Node));
memset(dataList.data, 0, 100 * sizeof (struct Node));
dataList.size = 100;
dataList.occupied = 0;

/*开始统计*/
srand((unsigned) time(NULL)); //初始化随机数

int i;

int d;

for (i = 0; i < 1000; i++) { //生成1000个50以内的随机数
d = rand() % 50;
//printf(" %d ", d ); //打印
//统计每个数出现的频度
statistic(&dataList, d);
}
struct Node result=maxFreq(&dataList);
free(dataList.data);
printf("出现频度最大的数:%d,出现次数:%d",result.item,result.freq);
}

void statistic(struct List *list, int d) {
int i = 0;
for (; i < list->occupied; i++) {
if (list->data[i].item == d) {
list->data[i].freq += 1; //数据已在表,频度加1
return;
}
}
//数据不在表中
if (i >= list->occupied) {
if (list->size <= list->occupied) { //空间不够
list->size+=100;//增加100个空间;
struct Node *temp= malloc(list->size * sizeof (struct Node));
memcpy(temp,list->data,list->occupied * sizeof (struct Node));
free(list->data);
memset(&(list->data[list->occupied]),0, 100 * sizeof (struct Node));
}
list->data[list->occupied].item = d;
list->data[list->occupied].freq += 1;
list->occupied++;
}
}
struct Node maxFreq(struct List* list){

struct Node temp;
temp.freq=list->data[0].freq;
temp.item=list->data[0].item;
int i=1;
for (; i < list->occupied; i++) {
if (temp.freq<list->data[i].freq){
temp.freq=list->data[i].freq;
temp.item=list->data[0].item;
}
}
return temp;
}