HJ20. 密码验证合格程序
描述
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
输入描述
一组字符串。
输出描述
如果符合要求输出:OK,否则输出NG
示例1
输入:
021Abc9000 021Abc9Abc1 021ABC9000 021$bc9000
输出:
OK NG NG OK
C 解法, 执行用时: 1ms, 内存消耗: 320KB, 提交时间: 2021-01-30
#include <stdio.h> int main() { char str[128]={0}; while(scanf("%s",str)==1) { //printf("%s\n",str); int len,A=0,a=0,b=0,c=0,flag=1; len=strlen(str); if(len<=8) { printf("NG\n"); continue; } for(int i=0;i<len;i++) { if((str[i]>='a'&&str[i]<='z')) { a=1; } else if((str[i]>='A'&&str[i]<='Z')) { A=1; } else if(str[i]>='0'&&str[i]<='9') b=1; else c=1; if(i<len-2) { char str1[4]={0}; char *str2=NULL; str1[0]=str[i]; str1[1]=str[i+1]; str1[2]=str[i+2]; str2=strstr(str+i+3,str1); if(str2!=NULL) { printf("NG\n"); flag=0; break; } } } if(A+a+b+c>=3 && flag) printf("OK\n"); else if(A+a+b+c<3 && flag) printf("NG\n"); } return 0; }
C 解法, 执行用时: 1ms, 内存消耗: 332KB, 提交时间: 2022-02-09
#include <stdio.h> int is_upper(char ch) { if (ch >= 'A' && ch <= 'Z') { return 1; } return 0; } int is_lower(char ch) { if (ch >= 'a' && ch <= 'z') { return 1; } return 0; } int is_number(char ch) { if (ch >= '0' && ch <= '9') { return 1; } return 0; } int is_repeat(char *str) { int i,j; for (i = 0; i < strlen(str) - 1; i++) { for (j = i+3; j < strlen(str); j+=3) { if (str[i] == str[j] && str[i+1] == str[j+1] && str[i+2] == str[j+2]) { //printf("%d %d\n",i,j); return 1; } } } return 0; } int main(void) { char str[101]; while (scanf("%s",str)!=EOF) { int len = strlen(str); int vis[4] = {0,0,0,0}; if (len <= 8) { printf("NG\n"); } else { int i; if (is_repeat(str)) { printf("NG\n"); continue; } for (i = 0; i < len; i++) { if (is_upper(str[i])) { vis[0] = 1; } else if (is_lower(str[i])) { vis[1] = 1; } else if (is_number(str[i])) { vis[2] = 1; } else { vis[3] = 1; } } if (vis[0] + vis[1] + vis[2] + vis[3] >= 3) { printf("OK\n"); } else { printf("NG\n"); } } memset(str,0,sizeof(str)); } return 0; }