鱼C论坛

 找回密码
 立即注册
查看: 1030|回复: 3

求解

[复制链接]
发表于 2021-12-11 18:47:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
任务
林晓炜正在设计一个网络交易系统,为了保证用户的密码安全,他需要一个程序,判断用户自己设置的密码是否安全,如果不安全,则给出提示。现在他向你求助,请你帮忙设计一个程序来解决这个问题。

应当按照以下的规则来判断密码是否安全:

如果密码长度小于 6 位,则不安全
如果组成密码的字符只有一类,则不安全
如果组成密码的字符有两类,则为中度安全
如果组成密码的字符有三类或以上,则为安全
通常,可以认为数字、大写字母、小写字母和其它符号为四类不同的字符。

输入
输入的第一行是一个整数 N,表明后面有多少组密码。随后的 N 行输入包括 N 个密码,每个密码的长度均小于 20 个字符。

输出
针对每一个密码判断并输出它是否安全。对于不安全的密码输出 "Not Safe",对于中度安全的密码输出 "Medium Safe",对于安全的密码输出 "Safe"

输入样例
4
1234
abcdef
ABC123
1#c3Gh
输出样例
Not Safe
Not Safe
Medium
Safe
Safe
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-11 19:26:34 | 显示全部楼层
本帖最后由 jhq999 于 2021-12-11 19:33 编辑
char pw[32]={0},flag[4]={0};
int num=0,i=0,j=0;
scanf("%d",&num);
for(i=0;i<num;i++)
{
     j=0;
     while(pw[j])pw[j++]='\0';
     scanf("%s",pw);
     for(j=0;pw[j];j++)
     {
          if(pw[j]>='a'&&pw[j]<='z')flag[0]|=1;
          else if(pw[j]>='A'&&pw[j]<='Z')flag[1]|=1;
          else if(pw[j]>='0'&&pw[j]<='9')flag[2]|=1;
          else flag[3]|=1;
     }
if(j<6)printf("Not Safe");
else if((flag[0]+flag[1]+flag[2]+flag[3])==1)printf("Not Safe");
else if((flag[0]+flag[1]+flag[2]+flag[3])==2)printf("Medium");
else if((flag[0]+flag[1]+flag[2]+flag[3])>=3)printf("Safe");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-11 19:30:28 | 显示全部楼层
#include <stdio.h>

int check(char s[])
{
        int a , c , d , e  , n , r                        ;
        for(a = c = d = e = n = r = 0 ; s[n] ; n ++) {
                if(s[n] >= '0' && s[n] <= '9') d = 1      ;
                else if(s[n] >= 'A' && s[n] <= 'Z') c = 1 ;
                else if(s[n] >= 'a' && s[n] <= 'z') a = 1 ;
                else e = 1                                ;
        }
        if(n > 5) {
                if((a + c + d + e) == 1) r = 1            ;
                else r = 2                                ;
        }
        return r                                          ;
}

int main(void)
{
        char s[200][24]                                                     ;
        int e , i , j , n                                                   ;
        scanf("%d" , & n)                                                   ;
        fflush(stdin)                                                       ;
        for(i = 0 ; i < n ; i ++) {
                for(j = 0 ; j < 20 && (s[i][j] = getchar()) != '\n' ; j ++) ;
                s[i][j] = '\0'                                              ;
        }
        for(i = 0 ; i < n ; i ++) {
                e = check(s[i])                                             ;
                if(! e) printf("Not Safe\n")                                ;
                else if(e == 1) printf("Medium Safe\n")                     ;
                else printf("Safe\n")                                       ;
        }        
}
        编译、运行实况:
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
4
1234
abcdef
ABC123
1#c3Gh
Not Safe
Medium Safe
Safe
Safe

D:\00.Excise\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-11 19:45:25 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-12-11 20:01 编辑
#include <stdio.h>
#include <string.h>
#include <ctype.h>

char* levels(char* p){
    if(strlen(p) < 6) return "Not Safe";
    int digit = 0, upper = 0, lower = 0, other = 0;
    for(int i = 0; p[i]; i++){
        if(isdigit(p[i])) digit = 1;
        else if(isupper(p[i])) upper = 1;
        else if(islower(p[i])) lower = 1;
        else other++;
    }
    if(digit + upper + lower + other == 1) return "Not Safe";
    else if(digit + upper + lower + other < 3) return "Medium Safe";
    else return "Safe";
}

int main()
{
    char p[20];
    int n;
    scanf("%d", &n);
    char* res[n];
    for(int i = 0; i < n; i++){
        scanf("%s", p);
        res[i] = levels(p);
    }
    for(int i = 0; i < n; i++) printf("%s\n", res[i]);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-15 17:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表