C語言網——密碼
阿新 • • 發佈:2018-12-26
問題 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; }