跳转至

GESP 3级

B3848 [GESP样题 三级] 逛商场

B3849 [GESP样题 三级] 进制转换

B3842 [GESP202306 三级] 春游

B3843 [GESP202306 三级] 密码合规

提示

大写、小写、数字,至少有两种

使用 a + b + c >= 2

if (a + b + c >= 2 && d == 1) return true;

代码
// 输入string
// 每个逗号之间拆分出来密码,判断是否合法
// 长度合法
// 小写、大写、数字、4个特殊字符
// 大写、小写、数字,至少有两种
// 特殊字符必须有

#include <bits/stdc++.h>

using namespace std;

string s;

bool check(string s) {
    int len = s.size();
    if (len < 6 || len > 12) return false;
    int a = 0, b = 0, c = 0, d = 0;
    for (int i = 0; i < len; i++) {
        if (s[i] >= 'a' && s[i] <= 'z') a = 1;
        else if (s[i] >= 'A' && s[i] <= 'Z') b = 1;
        else if (s[i] >= '0' && s[i] <= '9') c = 1;
        else if (s[i] == '!' || s[i] == '@' || s[i] == '#' || s[i] == '$') d = 1;
        else return false;
    }

    if (a + b + c >= 2 && d == 1) return true;
    return false;
}

int main() {
    cin >> s;
    for (int i = 0, len = s.size(); i < len; i++) {
        string t;
        int j = i;
        while (j < len && s[j] != ',') t += s[j++];

        if (check(t)) cout << t << '\n';

        i = j;
    }


    return 0;
}

B3867 [GESP202309 三级] 小杨的储蓄

B3868 [GESP202309 三级] 进制判断

代码
#include<bits/stdc++.h>
using namespace std;
void f(string s) {
    int a = 1, b = 1, c = 1, d = 1;
    for (int i = 0, len = s.size(); i < len; i++) {
        if (s[i] >= '2') a = 0;
        if (s[i] >= '8') b = 0;
        if (s[i] > '9') c = 0;
        if (s[i] >= 'G') d = 0;
    }
    cout << a << ' ' << b << ' ' << c << ' ' <<  d << endl;
}
int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        string s;
        cin >> s;
        f(s);
    }
    return 0;
}

B3925 [GESP202312 三级] 小猫分鱼

B3926 [GESP202312 三级] 单位转换

B3956 [GESP202403 三级] 字母求和

B3957 [GESP202403 三级] 完全平方数

B4003 [GESP202406 三级] 移位

B4004 [GESP202406 三级] 寻找倍数

B4038 [GESP202409 三级] 平衡序列

B4039 [GESP202409 三级] 回文拼接

B4066 [GESP202412 三级] 数字替换

B4067 [GESP202412 三级] 打印数字

B4261 [GESP202503 三级] 2025

B4262 [GESP202503 三级] 词频统计

B4358 [GESP202506 三级] 奇偶校验

B4359 [GESP202506 三级] 分糖果

B4413 [GESP202509 三级] 数组清零

代码
// 每次用最大减去最小,直到数组全是0
// 输出操作次数
#include <bits/stdc++.h>

using namespace std;

int a[110], n, cnt;

int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];

    while (true) {
        int maxn = -1, minn = 110, k;
        for (int i = 1; i <= n; i++) {
            if (a[i] >= maxn) maxn = a[i], k = i;
            if (a[i] && a[i] < minn) minn = a[i];
        }

        a[k] -= minn;
        cnt++;

        // 全是0
        bool flag = false;
        for (int i = 1; i <= n; i++) if (a[i]) flag = true;
        if (!flag) break;
    }

    cout << cnt;

    return 0;
}

// 判断跳出循环,也可以用最小值是0,来结束循环

B4414 [GESP202509 三级] 日历制作

提示

我们发现,这道题目,只问2025年的,所以12个月的日历是固定的

在考场上,可以直接输出

我们在练习的时候,不允许直接输出,通过代码推m月的1号是星期几

代码
// MON TUE WED THU FRI SAT SUN
// 0   1   2   3   4   5   6
#include <bits/stdc++.h>

using namespace std;

int mon[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int m;

int main() {
    cin >> m;

    int t = 0;
    if (m > 9) {
        for (int i = 9; i < m; i++) t = (t + mon[i]) % 7;
    }
    if (m < 9) {
        for (int i = 9 - 1; i >= m; i--) t = (t - mon[i]) % 7;
        t = (t + 7) % 7;
    }

//  printf("---%d\n", t);

    printf("MON TUE WED THU FRI SAT SUN\n");
    for (int i = 0; i < t; i++) printf("    ");
    for (int i = 1; i <= mon[m]; i++) {
        printf("%3d ", i);
        t++;
        if (t == 7) {t = 0; cout << endl;}
    }

    return 0;
}

B4449 [GESP202512 三级] 密码强度

B4450 [GESP202512 三级] 小杨的智慧购物