• 排序的使用


    分数线

    某小学举办了一场校内的信息学竞赛选拔赛。

    现在同学们的成绩都出来了,负责信息学竞赛的老师需要确定最终选拔赛的获奖名单。

    为了鼓励大家,老师希望获奖人数不少于参赛总人数的一半。

    因此,老师需要确定一个获奖分数线,所有得分在分数线及以上的同学可以获奖。

    在满足上面条件的情况下,老师希望获奖分数线越高越好。

    请同学们通过程序设计的方法来解决以上问题,确定获奖分数线和总获奖人数。

    输入格式 第一行为一个整数 n 表示参赛总人数。

    第二行为 n 个整数,分别表示 n(1≤n≤100000) 个参赛同学的分数,

    所有分数都是在 0~100 之间的整数(含 0 和 100),每两个数之间用一个空格隔开。

    输出格式 输出为一行,包括两个整数,分别表示分数线和获奖人数(中间用一个空格隔开)。

    样例输入

    7

    76 71 42 4 27 27 20

    样例输出

    27 5

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n;
        scanf("%d", &n);
        int s[n];
        int cnt = 0;
        for (int i = 0; i < n; i++)
        {
            scanf("%d", &s[i]);
        }
        sort(s, s + n);
        printf("%d ", s[n / 2]);
        for (int i = 0; i < n; i++)
        {
            if (s[i] >= s[n / 2])
            cnt++;
        }
        printf("%d", cnt);
        return 0;
    }
    

    红绿蓝

    蒜头君有一个罐子,里面装着红的、绿的、蓝的玻璃珠若干,分别用 R、G、B 表示。

    蒜头君希望把它们排成一行,并且按照字典序排列(即 B -> G -> R 的顺序)。

    然后以一红二绿三蓝为一组串成一串幸运珠,多余的放回罐子里,那么他能串成多少串幸运珠呢?

    输入格式

    输入为一行,是一个由若干个 R、G、B 乱序组成的字符串,长度小于 10000,每个字母至少出现一次。

    输出格式

    输出共 2 行; 第 1 行是排序完成后的字符串; 第 2 行是一个整数,为串成的幸运珠的数目。

    样例输入

    RGGBBB

    样例输出

    BBBGGR

    1

    /*
    1.排序
    2.可以串成幸运珠的数目,取决于r,g/2,b/3中的最小者
    */
    #include <stdio.h>
    #include <algorithm>
    #include <string.h>
    using namespace std;
    char str[10005];
    int main()
    {
        scanf("%s", str);
        int len = strlen(str);
        int cnt[3] = {0};
        for (int i = 0; i < len; i++)
        {
            if (str[i] == 'R')
            {
                cnt[0]++;
            }
            if (str[i] == 'G')
            {
                cnt[1]++;
            }
            if (str[i] == 'B')
            {
                cnt[2]++;
            }
        }
        sort(str, str + len);
        printf("%s
    ", str);
        if (cnt[1] / 2 < cnt[0])
        {
            cnt[0] = cnt[1] / 2;
        }
        if (cnt[2] / 3 < cnt[0])
        {
            cnt[0] = cnt[2] / 3;
        }
        printf("%d",cnt[0]);
        return 0;
    }
    

    交叉排序

    蒜头君很无聊,他想对数组中的某些元素进行排序。

    现在我们有 N 个数,他想先将数组中第 l1 到第 r1 的数字按从小到大的顺序排序。

    再将数组中第 l2 到第 r2 的数字按从大到小的顺序排序。

    我们帮他算一算数组排序后的结果吧~

    输入格式 第一行五个整数 N, l1, r1, l2, r2

    其中 0 < l1 < r1 < N, 0 < l2 < r2 < N

    这五个数不超过 10000; 第二行为 N 个整数。

    输出样例 一行 N 个整数,表示数组排序以后的结果,数字之间用空格隔开,末尾换行。

    样例输入

    6 1 3 2 4

    8 3 1 6 9 2

    样例输出

    1 8 6 3 9 2

    //这个破题一直说我格式错误
    //我觉得判题判的有问题
    #include <iostream>
    #include <algorithm>
    using namespace std;
    int main()
    {
        int n, l1, r1, l2, r2;
        cin >> n >> l1 >> r1 >> l2 >> r2;
        int a[10000];
        for (int i = 0; i < n; i++)
        {
            cin >> a[i];
        }
        sort(a + l1 - 1, a + r1);
        sort(a + l2 - 1, a + r2, greater<int>());
        for (int i = 0; i < n; i++)
        {
            cout << a[i] << " ";
        }
        cout << endl;
        return 0;
    }
    

    前K名的平均数

    小蒜的老师希望知道班上的信息学尖子生的水平如何。

    老师请小蒜同学帮忙算出班上信息学成绩前 K 名的平均成绩。

    输入格式 输入共有三行:

    第一行:为小蒜所在班级的人数 N(其中 1≤N≤30);

    第二行:为 N 个用 1 个空格隔开的信息学分数(其中分数为 700 及以内正整数);

    第三行:老师想计算平均数的尖子生人数 K。

    输出格式 输出一行共一个实数,为信息学分数前 K 名同学的分数平均数。四舍五入保留两位小数。

    样例输入

    10

    93 85 77 68 59 100 43 94 75 82

    4

    样例输出

    93.00

    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int main()
    {
        int n;
        int a[30];
        int k;
        int sum=0;
        scanf("%d",&n);
        for (int i = 0; i < n; i++)
        {
            scanf("%d",&a[i]);
        }
        scanf("%d",&k);
        sort(a,a+n,greater<int>());
        for (int i = 0; i < k; i++)
        {
            sum+=a[i];
        }
        printf("%.2f
    ",sum*1.0/k);
        return 0;
    }
  • 相关阅读:
    2019.2.18接口
    第一阶段复习
    vue-cli使用介绍
    Webpack 入门教程
    js报错Uncaught TypeError: Cannot read property 'getElementsByTagName' of null
    用shell编程.编写一个程序,用循环创建多个目录 并在该目录下创建多个文件 在文件中写入内容:
    explorer.exe应用程序错误,怎么解决?
    [Java连接MySQL数据库——含详细步骤和代码](https://www.cnblogs.com/town123/p/8336244.html)
    墨刀的简单使用
    laravel报错:SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0' for key 'PRIMARY...
  • 原文地址:https://www.cnblogs.com/qing123tian/p/12349264.html
Copyright © 2020-2023  润新知