A - 前m大的数
这个题思路很简单,但是写代码的时候还是有很多东西不太确定,比如数组定义多大,能不能定义那么大的数组,后来听说十的八次方后想了想应该可以;数列排序我刚想到的就是冒泡排序吧,然后想了想时间复杂度估计跑不起来,学长刚好讲了sort函数,课上没听太懂,课下自己百度了一下基本上懂了,通过这道题也对sort函数更熟悉了。

#include 
#include 
using namespace std;
int a[3010];
int sum[5000000];
int main()
{
    int n, m, b ;
    while (~scanf("%d %d", &n, &m)) {
        b = 0;
        for (int i = 0; i < n; i++) {
            cin >> a[i];
        }
        for (int i = 0; i < n - 1; i++) {
            for (int j = i + 1; j < n; j++) {
                sum[b] = a[i] + a[j];
                b++;
            }
        }
        sort(sum, sum + b);//默认从小到大排序
        for (int i = b-1; i > b - m; i--) {
            cout << sum[i]<<' ';
        }
        cout<<sum[b-m] << '\n';//细节,最后一个输出无空格
    }
    return 0;
}

B - 稳定排序
这是我第一次写与结构体有关的题,手比较生,在论坛上看了这个同学的代码,感觉他的思路很清晰,让我把这道题看的很透彻。https://blog.csdn.net/weixin_47701814/article/details/106163326

#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;

struct stu {
    char name[50];
    int fenshu;
    int bh;
}a[300], b[300];//第一次写的时候把s函数写在了结构体声明的前面,费了些时间才搞明白
int s(stu a, stu b) {
    if (a.fenshu != b.fenshu)
        return a.fenshu > b.fenshu;
    else
        return a.bh < b.bh;
}//规定排序,优先级分数在前,标号在后;
int main()
{
    int n;
    while (~scanf("%d", &n)) {
        int c = 0, d = 0;
        for (int i = 0; i < n; i++) {
            cin >> a[i].name >> a[i].fenshu;
            a[i].bh = i;
        }
        sort(a, a + n, s);
        for (int i = 0; i < n; i++) {
            cin >> b[i].name >> b[i].fenshu;
            b[i].bh = i;
        }
        for (int i = 0; i < n; i++) {
            if (a[i].fenshu != b[i].fenshu)
                c = 1;
        }
        if (!c) {
            for (int i = 0; i < n; i++) {
                if ((strcmp(a[i].name, b[i].name)) != 0){
                    d = 1;
                    break;
                }//这个strcmp感觉用的很巧妙
            }
        }
        if (c == 0 && d == 1) {
            cout << "Not Stable" << '\n';
            for (int i = 0; i < n; i++) {
                cout << a[i].name << ' ' << a[i].fenshu << '\n';
            }
        }else if(c) {
            cout << "Error" << '\n';
            for (int i = 0; i < n; i++) {
                cout << a[i].name << ' ' << a[i].fenshu << '\n';
            }
        }else
            cout << "Right"<<'\n';


    }
    return 0;
}

C - 开门人和关门人
这个题目的主要问题就是对时间的处理,钉钉上讲的那种方法比较简洁,另一种方法就是struct里面定义6个数字,挨个比较,过程相对繁琐。

#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
struct jl {
    string hm,jr,chu;

}a[100];
int jinru(jl a, jl b)
{
    return a.jr < b.jr;
}
int chuqu(jl a, jl b)
{
    return a.chu > b.chu;
}
int main()
{
    int n,m;
    cin >> n;
    while (n--) {
        cin >> m;
        for (int i = 0; i < m; i++) {
            cin >> a[i].hm >> a[i].jr >> a[i].chu;
        }
        sort(a, a + m, jinru);
        cout << a[0].hm<<" ";
        sort(a, a + m, chuqu);
        cout << a[0].hm << "\n";

    }
    return 0;
}

*D - EXCEL排序 *
做过上面两道题,这道题做的时候感觉很顺,但提交就是不过,后来才发现审错题了,题目阐述C1,C2,C3的时候没太注意标点符号导致的。C3后面的那句话我当成是只限制C3的了但实际上是限制了所有的C。这也是以后做题应该引起特别关心的一个方面。

#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
struct stu {
    string name,xh;
    int cj;
}a[100010];
int c1(stu a, stu b){
    return a.xh < b.xh;
}
int c2(stu a, stu b) {
    if (a.name != b.name)
        return a.name < b.name;
    else
        return a.xh < b.xh;
}
int c3(stu a, stu b) {
    if (a.cj == b.cj)
        return a.xh < b.xh;
    else
        return a.cj < b.cj;
}
int main()
{
    int n, c,m=1;
    while (1) {
        cin >> n >> c;
        if (n == 0 && c == 0)
            break;
        for (int i = 0; i < n; i++) {
            cin >> a[i].xh >> a[i].name >> a[i].cj;
        }
        if (c == 1)
            sort(a, a + n, c1);
        if (c == 2)
            sort(a, a + n, c2);
        if(c==3)
            sort(a, a + n, c3);
        cout << "Case " << m << ':'<<'\n';
        m++;
        for (int i = 0; i < n; i++) {
            cout << a[i].xh << " " << a[i].name << " " << a[i].cj << "\n";
        }

    }
    return 0;
}
  **总结**:这四道都是跟排序相关的题目,让我真真正正地掌握了sort的用法。题可能不难,但这四道我还是做了一下午,万事开头难,以后应该会越来越好吧。Ps:后面的题我会尽快跟进