C语言分数统计

写在前面:这里是小王成长日志,一名在校大学生,想在学习之余将自己的学习笔记分享出来,记录自己的成长轨迹,帮助可能需要的人。欢迎关注与留言。

题目:

题目链接:https://www.dotcpp.com/oj/problem1500.html

题目 1500: [蓝桥杯][算法提高VIP]分数统计

时间限制: 1Sec 内存限制: 128MB 提交: 1541 解决: 709

题目描述
给定一个百分制成绩T,将其划分为如下五个等级之一:
90100为A,8089为B,7079为C,6069为D,0~59为E
现有若干百分制成绩(成绩个数不超过1000个),请你统计五个等级段的人数,并找出人数最多的那个等级段,按照从大到小的顺序输出该段中所有人成绩(保证人数最多的等级只有一个)。
输入
第一行是成绩的个数 n
第二行是学生的成绩,若干0~100的正整数,用空格隔开

输出
第一行为5个正整数,分别表示A,B,C,D,E五个等级段的人数
第二行一个正整数,表示人数最多的等级段中人数
接下来一行若干个用空格隔开的正整数,表示人数最多的那个等级中所有人的分数,按从大到小的顺序输出。
样例输入
10
100 80 85 77 55 61 82 90 71 60
样例输出
2 3 2 2 1
3
85 82 80

C语言解法

思路:

1.一个很正常的输入,根据输入的n创建5个数组来存储相应等级的分数,并在读取输入的时候就进行判断以将数据放进相应等级的数组
2.输入完成,这时已经有了5个数组并且我们知道其长度

  • 这时我们分为两步,1是找出这五个长度中的最大值,这里我直接用了暴力的if判断,应有更简单的方法
  • 对长度最大的数组进行排序并输出

注意:1.注意输出格式.2.排序并输出数组的部分明显是重复的,可以抽象成一个函数以便调用


#include <stdio.h>

int main()
{
    int n, temp = 0;
    scanf("%d", &n);
    int a[n], b[n], c[n], d[n], e[n];
    int ac = 0, bc = 0, cc = 0, dc = 0, ec = 0;//ac a count 数组a的计数器
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &temp);
        if (temp >= 90)
            a[ac++] = temp;
        else if (temp >= 80)
            b[bc++] = temp;
        else if (temp >= 70)
            c[cc++] = temp;
        else if (temp >= 60)
            d[dc++] = temp;
        else
            e[ec++] = temp;
    }
    printf("%d %d %d %d %d\n", ac, bc, cc, dc, ec);

    //找出5个数最大值
    if (ac > bc && ac > cc && ac > dc && ac > ec)
        fun(a, ac);
    else if (bc > ac && bc > cc && bc > dc && bc > ec)
        fun(b, bc);
    else if (cc > ac && cc > bc && cc > dc && cc > ec)
        fun(c, cc);
    else if (dc > ac && dc > bc && dc > cc && dc > ec)
        fun(d, dc);
    else
        fun(e, ec);
}

void fun(int a[], int len)
{
    //选择排序 从大到小
    int i, j, max = 0, min = 0, temp;
    for (i = 0; i < len; i++)
    {
        max = i;
        for (j = i + 1; j < len; j++)
            if (a[max] < a[j])
                max = j;

        if (max != i)
        {
            temp = a[max];
            a[max]=a[i];
            a[i]=temp;
        }
    }

    //打印结果
    printf("%d\n", len);
    printf("%d", a[0]);
    for (i = 1; i < len; i++)
        printf(" %d", a[i]);
}

都看到这里了,各位哥哥姐姐叔叔阿姨给小王点个赞 关个注 留个言吧,和小王一起成长吧,你们的关注是对我最大的支持。
有事没事进来看看吧 : 小王的博客目录索引
C语言专栏看这 : C语言学习专栏
C语言题目专栏看这 : C语言中文网题目专栏


如果以上内容有任何不准确或遗漏之处,或者你有更好的意见,就在下面留个言让我知道吧-我会尽我所能来回答。

猜你喜欢

转载自blog.csdn.net/weixin_45761327/article/details/106951129