JzxxOJ 1180: 【入门】求N个整数的平均数、众数和中位数

求N个整数的平均数、众数和中位数

题目描述
求N个整数的平均数,众数和中位数。
输入
第一行为整数N(5 <= N <= 10000 ) 第二行为空格隔开的N个数Ai(0 <= Ai <= 100 )

输出
输出空格隔开的平均数 众数 中位数(平均数保留两位小数,中位数保留一位小数)。

样例输入

6
5 2 2 3 4 6

样例输出

3.67 2 3.5

提示:
出现次数最多的数有且只有一个。
思路:
指针和函数的灵活运用,将数组先排序,后计算。由于求众数比较复杂,所以可以封装成函数,比较方便。
AC代码:

#include<stdio.h>
#include<algorithm>
using namespace std;
int a[10005];
/*交换两个整数的值*/
void swap(int *p, int *q)
{
    int buf;

    buf = *p;
    *p = *q;
    *q = buf;

    return;
}
/*查找一个有序数组中的众数*/
int find_mode_number(int *arr,int len)
{
    int many = 1,less = 1;
    int value = 0;
    for(int i = 0; i < len; i++)
    {
        for(int j = i; j < len; j++)
        {
            if(arr[j] == arr[j+1])
            {
                less++;
            }
            else
            {
                if(many < less)
                {
                    swap(&many,&less);
                    value = arr[j];
                }
                less = 1;
                break;
            }
        }
    }

    return value;
}

int main()
{
    int n;
    scanf("%d",&n);
    //输入数组元素
    for(int i=0; i<n; i++)
    {
        scanf("%d",&a[i]);
    }
    sort(a,a+n);    //将数组排序
    int sum=0;      //先求和后求平均数
    for(int i=0; i<n; i++)
    {
        sum+=a[i];  //数组求和
    }
    //平均数
    double avg=sum*1.0/n*1.0;
    //中位数
    double mid_num;
    if(n%2==0)//当数字个数为偶数时
    {
        mid_num=(a[(n-1)/2]+a[n/2])*1.0/2.0;
    }
    else      //当数字个数为奇数时

    {
        mid_num=a[n/2];
    }
    //众数
    int count=find_mode_number(a,sizeof(a)/sizeof(int));//调用求众数函数
    //打印
    printf("%.2lf %d %.1lf\n",avg,count,mid_num);
    return 0;
}

发布了33 篇原创文章 · 获赞 35 · 访问量 1287

猜你喜欢

转载自blog.csdn.net/qq_45856289/article/details/103517278
今日推荐