重数和众数问题——C语言实现

简介: 重数和众数问题——C语言实现

题还是很简单的,理清思路就可以了♪(・ω・)ノ

问题描述:

给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。

例如,S={1,2,2,2,3,4}。多重集S的众数是2,其重数为3。

 

样例输入:S={1,2,2,2,3,4}

样例输出:该多重集合众数是:2,重数是:3

#include<stdio.h>
#include<stdlib.h>
int main() {
  int a[] = { 1,2,2,2,3,4 };//多重集合
  int size = sizeof(a) / sizeof(int);//记算数组的大小
  int* b = malloc(sizeof(a));//用来记录每个数出现的个数(2)
  //int b[6] = { 0 };(2)
  int i = 0;
  int j = 0;
  //把b后面size个元素置为0
  for (i = 0;i < size;i++) {
    b[i] = 0;
  }
  int k = -1;//用来记录下标
  for (i = 0;i < size;i++) {
    for (j = 0;j < size;j++) {
      if (a[i] == a[j]) {
        b[i]++;
      }
    }
  }
  int max = b[0];//用来比较出现的个数,哪个最多
  for (i = 1;i < size;i++) {
    if (b[i] > max) {
      max = b[i];
      k = i;//把下标记录下来
    }
  }
  printf("该多重集合众数是:%d,重数是:%d", a[k], b[k]);
  return 0;
}

注:上面的代码中的(1)和(2)都是可以的!

但是使用 {int* b = malloc(sizeof(a));//用来记录每个数出现的个数} 的话,就必须有如下这段代码,将b后面指向地址的内容赋值为0。

//把b后面size个元素置为0
   for (i = 0;i < size;i++) {
       b[i] = 0;
   }

相关文章
|
7月前
|
存储 C语言
C语言中的级数求和
C语言中的级数求和
|
7月前
|
存储 C语言 索引
C语言数组求和,零基础也能轻松学会!
C语言数组求和,零基础也能轻松学会!
|
1月前
|
存储 算法 数据管理
C语言算法复杂度
【10月更文挑战第20天】
C语言算法复杂度
|
7月前
|
存储 人工智能 算法
C语言实现矩阵转置
C语言实现矩阵转置
563 0
|
7月前
|
搜索推荐 算法 C语言
C语言:选择排序法
C语言:选择排序法
|
7月前
|
C语言
C语言一元多项式的表示及相加讲解及相关代码
C语言一元多项式的表示及相加讲解及相关代码
250 0
|
存储 C语言
除自身以外数组的乘积(c语言详解)
除自身以外数组的乘积(c语言详解)
63 0
|
算法 C语言
C语言从数组里找最大最小值
C语言从数组里找最大最小值
129 0
|
算法 C语言
C语言杨氏矩阵
C语言杨氏矩阵
57 0
|
算法 C语言
简单算法之二分搜索——C语言
线性搜索效率低下,而二分搜索可以将数组中的数字分为两半,从而提高搜索效率。