HDU2043 密码

来源:互联网 发布:百度霸屏软件 编辑:程序博客网 时间:2024/05/03 23:59

问题链接:HDU2043 密码。入门训练题,用C语言编写程序。

问题简述参见上述链接。

问题分析这个题的密码检查有两个方面,一是密码长度,二是密码至少包含三类字符。

大写字母、小写字母和数字这三类的检查是常规检查,程序应该一看就懂。

第四类字符的密码检查稍微有所不同,那些字符在ASCII码表中,未必是连续存放的,所以检查时稍微需要一点点小技巧。用字符指针进行字符串的处理应该是个好主意。

程序说明(略)。

输入密码检查是常见的问题,这回成了一道题。

AC的C语言程序如下:

/* HDU2043 密码 */#include <stdio.h>#include <string.h>int main(void){    int m, count, f1, f2, f3, f4, len, i;    char s[256], t4[]="~!@#$%^", *p;    scanf("%d", &m);    while(m--) {        // 读入字符串        scanf("%s", s);        // 密码检查        count = 0;        f1 = f2 = f3 = f4 = 0;        len = strlen(s);        if(8 <= len && len <= 16) {             // 密码长度检查            for(i=0; i<len; i++) {                if('A' <= s[i] && s[i] <= 'Z')  // 第一类字符                    f1 = 1;                if('a' <= s[i] && s[i] <= 'z')  // 第二类字符                    f2 = 1;                if('0' <= s[i] && s[i] <= '9')  // 第三类字符                    f3 = 1;                p = t4;                         // 第四类字符                while(*p) {                    if(s[i] == *p) {                        f4 = 1;                        break;                    }                    p++;                }                count = f1 + f2 + f3 + f4;                if(count >= 3)                    break;            }        }        // 结果输出        if(count >= 3)            printf("YES\n");        else            printf("NO\n");    }    return 0;}


1 0
原创粉丝点击