鱼C论坛

 找回密码
 立即注册
查看: 1438|回复: 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
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-12-11 19:26:34 | 显示全部楼层
本帖最后由 jhq999 于 2021-12-11 19:33 编辑
  1. char pw[32]={0},flag[4]={0};
  2. int num=0,i=0,j=0;
  3. scanf("%d",&num);
  4. for(i=0;i<num;i++)
  5. {
  6.      j=0;
  7.      while(pw[j])pw[j++]='\0';
  8.      scanf("%s",pw);
  9.      for(j=0;pw[j];j++)
  10.      {
  11.           if(pw[j]>='a'&&pw[j]<='z')flag[0]|=1;
  12.           else if(pw[j]>='A'&&pw[j]<='Z')flag[1]|=1;
  13.           else if(pw[j]>='0'&&pw[j]<='9')flag[2]|=1;
  14.           else flag[3]|=1;
  15.      }
  16. if(j<6)printf("Not Safe");
  17. else if((flag[0]+flag[1]+flag[2]+flag[3])==1)printf("Not Safe");
  18. else if((flag[0]+flag[1]+flag[2]+flag[3])==2)printf("Medium");
  19. else if((flag[0]+flag[1]+flag[2]+flag[3])>=3)printf("Safe");
  20. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  2. int check(char s[])
  3. {
  4.         int a , c , d , e  , n , r                        ;
  5.         for(a = c = d = e = n = r = 0 ; s[n] ; n ++) {
  6.                 if(s[n] >= '0' && s[n] <= '9') d = 1      ;
  7.                 else if(s[n] >= 'A' && s[n] <= 'Z') c = 1 ;
  8.                 else if(s[n] >= 'a' && s[n] <= 'z') a = 1 ;
  9.                 else e = 1                                ;
  10.         }
  11.         if(n > 5) {
  12.                 if((a + c + d + e) == 1) r = 1            ;
  13.                 else r = 2                                ;
  14.         }
  15.         return r                                          ;
  16. }

  17. int main(void)
  18. {
  19.         char s[200][24]                                                     ;
  20.         int e , i , j , n                                                   ;
  21.         scanf("%d" , & n)                                                   ;
  22.         fflush(stdin)                                                       ;
  23.         for(i = 0 ; i < n ; i ++) {
  24.                 for(j = 0 ; j < 20 && (s[i][j] = getchar()) != '\n' ; j ++) ;
  25.                 s[i][j] = '\0'                                              ;
  26.         }
  27.         for(i = 0 ; i < n ; i ++) {
  28.                 e = check(s[i])                                             ;
  29.                 if(! e) printf("Not Safe\n")                                ;
  30.                 else if(e == 1) printf("Medium Safe\n")                     ;
  31.                 else printf("Safe\n")                                       ;
  32.         }        
  33. }
复制代码

        编译、运行实况:
  1. D:\00.Excise\C>g++ -o x x.c

  2. D:\00.Excise\C>x
  3. 4
  4. 1234
  5. abcdef
  6. ABC123
  7. 1#c3Gh
  8. Not Safe
  9. Medium Safe
  10. Safe
  11. Safe

  12. D:\00.Excise\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  4. char* levels(char* p){
  5.     if(strlen(p) < 6) return "Not Safe";
  6.     int digit = 0, upper = 0, lower = 0, other = 0;
  7.     for(int i = 0; p[i]; i++){
  8.         if(isdigit(p[i])) digit = 1;
  9.         else if(isupper(p[i])) upper = 1;
  10.         else if(islower(p[i])) lower = 1;
  11.         else other++;
  12.     }
  13.     if(digit + upper + lower + other == 1) return "Not Safe";
  14.     else if(digit + upper + lower + other < 3) return "Medium Safe";
  15.     else return "Safe";
  16. }

  17. int main()
  18. {
  19.     char p[20];
  20.     int n;
  21.     scanf("%d", &n);
  22.     char* res[n];
  23.     for(int i = 0; i < n; i++){
  24.         scanf("%s", p);
  25.         res[i] = levels(p);
  26.     }
  27.     for(int i = 0; i < n; i++) printf("%s\n", res[i]);
  28.     return 0;
  29. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-1 15:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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