老葭鱼 发表于 2021-12-11 18:47:16

求解

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

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

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

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

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

输入样例
4
1234
abcdef
ABC123
1#c3Gh
输出样例
Not Safe
Not Safe
Medium
Safe
Safe

jhq999 发表于 2021-12-11 19:26:34

本帖最后由 jhq999 于 2021-12-11 19:33 编辑

char pw={0},flag={0};
int num=0,i=0,j=0;
scanf("%d",&num);
for(i=0;i<num;i++)
{
   j=0;
   while(pw)pw='\0';
   scanf("%s",pw);
   for(j=0;pw;j++)
   {
          if(pw>='a'&&pw<='z')flag|=1;
          else if(pw>='A'&&pw<='Z')flag|=1;
          else if(pw>='0'&&pw<='9')flag|=1;
          else flag|=1;
   }
if(j<6)printf("Not Safe");
else if((flag+flag+flag+flag)==1)printf("Not Safe");
else if((flag+flag+flag+flag)==2)printf("Medium");
else if((flag+flag+flag+flag)>=3)printf("Safe");
}

jackz007 发表于 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 ++) {
                if(s >= '0' && s <= '9') d = 1      ;
                else if(s >= 'A' && s <= 'Z') c = 1 ;
                else if(s >= 'a' && s <= '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                                                   ;
      int e , i , j , n                                                   ;
      scanf("%d" , & n)                                                   ;
      fflush(stdin)                                                       ;
      for(i = 0 ; i < n ; i ++) {
                for(j = 0 ; j < 20 && (s = getchar()) != '\n' ; j ++) ;
                s = '\0'                                              ;
      }
      for(i = 0 ; i < n ; i ++) {
                e = check(s)                                             ;
                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>

傻眼貓咪 发表于 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++){
      if(isdigit(p)) digit = 1;
      else if(isupper(p)) upper = 1;
      else if(islower(p)) 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;
    int n;
    scanf("%d", &n);
    char* res;
    for(int i = 0; i < n; i++){
      scanf("%s", p);
      res = levels(p);
    }
    for(int i = 0; i < n; i++) printf("%s\n", res);
    return 0;
}
页: [1]
查看完整版本: 求解