1. 程式人生 > >C語言網——密碼

C語言網——密碼

問題 1162: 【密碼】

時間限制: 1Sec 記憶體限制: 128MB 提交: 797 解決: 244

題目描述

網上流傳一句話:"常在網上飄啊,哪能不挨刀啊~"。其實要想能安安心心地上網其實也不難,學點安全知識就可以。 
首先,我們就要設定一個安全的密碼。那什麼樣的密碼才叫安全的呢?一般來說一個比較安全的密碼至少應該滿足下面兩個條件: 
(1).密碼長度大於等於8,且不要超過16。 
(2).密碼中的字元應該來自下面“字元類別”中四組中的至少三組。 
這四個字元類別分別為: 
1.大寫字母:A,B,C...Z; 
2.小寫字母:a,b,c...z; 
3.數字:0,1,2...9; 
4.特殊符號:~,!,@,#,$,%,^; 
給你一個密碼,你的任務就是判斷它是不是一個安全的密碼。

輸入

輸入資料第一行包含一個數M,接下有M行,每行一個密碼(長度最大可能為50),密碼僅包括上面的四類字元。

輸出

對於每個測試例項,判斷這個密碼是不是一個安全的密碼,是的話輸出YES,否則輸出NO。

樣例輸入
3
a1b2c3d4
[email protected]
^~^@^@!%
樣例輸出
NO
YES
NO
傻瓜式的判定方法

AC程式碼:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>

int main()
{
	int n;
	int i;
	int count;
	char a[100];
	int visit[4];
	scanf("%d",&n);
	while(n--){
		scanf("%s",&a);
		if(strlen(a)<8||strlen(a)>16){
			printf("NO\n");
			continue;
		}
		count=0;
		memset(visit,0,sizeof(visit));
		for(i=0;a[i]!='\0';i++){
			if(a[i]>='0'&&a[i]<='9'){
				if(visit[0]==1){
					continue;
				}
				count++;
				visit[0]=1;
			}
			else if(a[i]>='A'&&a[i]<='Z'){
				if(visit[1]==1){
					continue;
				}
				count++;
				visit[1]=1;
			}
			else if(a[i]>='a'&&a[i]<='z'){
				if(visit[2]==1){
					continue;
				}
				count++;
				visit[2]=1;
			}
			else if(a[i]=='~'||a[i]=='!'||a[i]=='@'||a[i]=='#'||a[i]=='$'||a[i]=='%'||a[i]=='^'){
				if(visit[3]==1){
					continue;
				}
				count++;
				visit[3]=1;
			}
		}
		if(count>=3){
			printf("YES\n");
		}
		else{
			printf("NO\n");
		}
	}
	return 0;
}