當前位置:首頁 » 編程語言 » 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;
}