實驗7-1-11 求整數序列中出現次數最多的數 (15 分)(結構陣列排序)
阿新 • • 發佈:2018-12-13
浙大版《C語言程式設計實驗與習題指導(第3版)》題目集
實驗7-1-11 求整數序列中出現次數最多的數 (15 分)
本題要求統計一個整型序列中出現次數最多的整數及其出現次數。
輸入格式:
輸入在一行中給出序列中整數個數N(0<N≤1000),以及N個整數。數字間以空格分隔。
輸出格式:
在一行中輸出出現次數最多的整數及其出現次數,數字間以空格分隔。題目保證這樣的數字是唯一的。
輸入樣例:
10 3 2 -1 5 3 4 3 0 3 2
輸出樣例:
3 4
我的程式碼
1.在結構陣列中找到frequency最大結構的直接輸出
#include <stdio.h>
struct a{
int number;
int frequency;
};
int main(){
int n;
scanf("%d", &n);
int input[n];
for(int i = 0; i < n; i++){
scanf("%d", &input[i]);
}
struct a num[n];
int j = 0, exist = 0; //j是結構中數字的個數,exist記錄陣列中的數字是否出現過
for(int i = 0; i < n; i++)
{
//如果存在,就在次數上加1
for(int k = 0; k < j; k++)
{
if(input[i] == num[k].number)
{
num[k].frequency += 1;
exist = 1;
}
}
//如果不存在,就把這個數字加入結構,並初始化次數為1
if(exist == 0)
{
num[j].number = input[i];
num[ j].frequency = 1;
j ++;
}
exist = 0;
}
//直接尋找結構陣列中frequency最大的那個結構
int mfn = num[0].frequency, h = 0;//mfn記錄最大的次數,f記錄這個數字在結構中的下標
for(int i = 0; i < j; i++){
if(mfn < num[i].frequency){
mfn = num[i].frequency;
h = i;
}
}
printf("%d %d\n", num[h].number, num[h].frequency);
}
2.對結構陣列降序排序,然後輸出第一個
#include <stdio.h>
struct a{
int number;
int frequency;
};
//按照frequency降序排序
void bubble(struct a *p,int n){
struct a temp;
for(int i = 1; i < n; i++){
for(int j = 0; j < n-1; j++){
if((p[j].frequency) < (p[j+1].frequency)){
temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
}
}
}
int main(){
int n;
scanf("%d", &n);
int input[n];
for(int i = 0; i < n; i++){
scanf("%d", &input[i]);
}
struct a num[n];
int j = 0, exist = 0; //j是結構中數字的個數,exist記錄陣列中的數字是否出現過
for(int i = 0; i < n; i++)
{
//如果存在,就在次數上加1
for(int k = 0; k < j; k++)
{
if(input[i] == num[k].number)
{
num[k].frequency += 1;
exist = 1;
}
}
//如果不存在,就把這個數字加入結構,並初始化次數為1
if(exist == 0)
{
num[j].number = input[i];
num[j].frequency = 1;
j ++;
}
exist = 0;
}
//進行排序
bubble(num, j);
//排序後結構中的第一個就是frequency最大的
printf("%d %d\n", num[0].number, num[0].frequency);
}