zl程序教程

您现在的位置是:首页 >  其他

当前栏目

牛牛的密码

2023-09-27 14:28:26 时间

牛牛的密码 ⁡ \operatorname{牛牛的密码}

题目链接: nowcoder 212986 ⁡ \operatorname{nowcoder\ 212986} nowcoder 212986

关于这场比赛

——>点我可以查看其它题目(目录)<——

到牛客看

——>点我跳转<——

题目

牛牛在注册不同的网站时,总是会使用不同的密码来保证他的账号安全。
为了保证他的密码强度,牛牛使用他的“字符串筛选器”来测试密码的强度。
具体来说,他先将输入的字符串筛选分成四部分。

第一部分仅由小写英文字母组成

第二部分仅由大写英文字母组成

第三部分仅由 0 0 0 9 9 9 的数字组成

第四部分由其余特殊字符组成

这四部分要保留它们在原字符串中的相对顺序。

比如将 “1q2w3E4R5{6}” 这个字符串进行筛选后

四部分分别为:“qw”、“ER”、“123456”、"{}"。

然后只要某一部分不为空,牛牛就认为他的密码等级高 1 1 1 级。
密码等级最低为 1 1 1 级,最高 4 4 4 级。
例如 “asdA@123” 的密码等级为 4 4 4,“20020101” 的密码等级为 1 1 1

请帮助牛牛判断他注册账号时的密码等级,以及该密码做字符串筛选后的结果。

输入

仅一行一个字符串 s s s,表示牛牛的密码。

输出

首先输出一行 “password level:X”, X X X 表示牛牛的密码等级,最低为 1 1 1 级,最高 4 4 4 级。
接下来输出 4 4 4 行,表示四部分的筛选结果,输出时要注意保留它们在原字符串中的相对顺序,如果某一部分为空串,则改为在该行输出 “(Null)”。

样例输入1

123456

样例输出1

password level:1
(Null)
(Null)
123456
(Null)

样例输入2

Pass_Word

样例输出2

password level:3
assord
PW
(Null)
_

数据范围

对于 20 % 20\% 20% 的测试数据,保证仅有小写英文字母组成,且 1 ≤ ∣ s ∣ ≤ 100 1 \leq |s| \leq 100 1s100
对于 40 % 40\% 40% 的测试数据,保证仅有大小写英文字母组成,且 1 ≤ ∣ s ∣ ≤ 100 1 \leq |s| \leq 100 1s100
对于 100 % 100\% 100% 的测试数据,保证字符串是不含空格、回车、或者其他不可见字符的非空字符串,且保证字符串长度 1 ≤ ∣ s ∣ ≤ 1 0 4 1 \leq |s| \leq 10^4 1s104

思路

这道题就是一道模拟题。

就把一个字符串拆成四个部分,分别就是上面的四种。
就直接一个一个枚举字符,然后看是哪一个部分的,然后就放过去。

最后按要求输出就可以了。

考试时

看到题目:啊?哦。
然后就打完交上去跑了。。。
得分: 100 100 100
在这里插入图片描述

代码

#include<cstdio>
#include<cstring>

using namespace std;

char r[10001], a[10001], b[10001], c[10001], d[10001];
int lev, hav[4];

int main() {
    scanf("%s", &r);
    
    for (int i = 0; i < strlen(r); i++) {
        if (r[i] >= 'a' && r[i] <= 'z') {
            if (!hav[0]) lev++;
            a[++hav[0]] = r[i];
            continue;
        }
        if (r[i] >= 'A' && r[i] <= 'Z') {
            if (!hav[1]) lev++;
            b[++hav[1]] = r[i];
            continue;
        }
        if (r[i] >= '0' && r[i] <= '9') {
            if (!hav[2]) lev++;
            c[++hav[2]] = r[i];
            continue;
        }
        if (!hav[3]) lev++;
        d[++hav[3]] = r[i];
    }
    
    printf("password level:%d\n", lev);
    for (int i = 0; i < 4; i++) {
        if (!hav[i]) printf("(Null)\n");
            else {
                if (i == 0) {
                    for (int j = 1; j <= hav[i]; j++)
                        printf("%c", a[j]);
                    printf("\n");
                    continue;
                }
                if (i == 1) {
                    for (int j = 1; j <= hav[i]; j++)
                        printf("%c", b[j]);
                    printf("\n");
                    continue;
                }
                if (i == 2) {
                    for (int j = 1; j <= hav[i]; j++)
                        printf("%c", c[j]);
                    printf("\n");
                    continue;
                }
                for (int j = 1; j <= hav[i]; j++)
                   printf("%c", d[j]);
                printf("\n");
            }
    }
    
    return 0;
}