程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 【課上OJ】判斷密碼強度,oj密碼強度

【課上OJ】判斷密碼強度,oj密碼強度

編輯:關於C語言

【課上OJ】判斷密碼強度,oj密碼強度


一個判斷密碼強度問題:

假設允許采用以下四類字符作為密碼:
(1)大寫英文字母,(2)小寫英文字母,(3)數字0-9,(4)特殊符號 @ - _ # ~
對密碼強度做以下規定:
Best: 長度>=16,且包含以上四類字符,且每類至少有兩個不同的字符
Strong: 不符合Best規定,但長度>=10,且包含以上四類字符
Medium: 不符合Best、Strong規定,但長度>=8,且包含以上至少三類字符
Weak:不符合Best、Strong、Medium規定。
現給你一個密碼組合,請判斷密碼強度。
輸入格式:一行字符串(長度<100,以換行結束),且保證都是以上四類字符。
輸出格式:一行信息,先輸出密碼長度,然後是強度等級,中間空一格。

輸入樣例1:abcdXYZ1234@-_-#
輸出樣例1:16 Best
輸入樣例2:12345678abcdefghXYZ
輸出樣例2:19 Medium
輸入樣例3:aX1@
輸出樣例3:4 Weak

 

題目關鍵在於Best裡面的每類至少有兩個不同的字符,若想實現此功能可以定義多個數組。

c源代碼: #include"stdio.h"
int main()
{
char a[100],sz[100],ZM[100],zm[100],fh[100];
int i,j,k,l,m,n,sum,zm0,ZM0,sz0,fh0;
i=0;
k=l=m=n=0;
zm0=0;
ZM0=0;
sz0=0;
fh0=0;
sum=0;
while((a[i]=getchar())!='\n')
{
i++;
}
for(j=0;j<i;j++)
{
if(a[j]>='A'&&a[j]<='Z')
{
ZM[k]=a[j];
k++;
}

else if(a[j]>='a'&&a[j]<='z')
{
zm[l]=a[j];
l++;
}
else if(a[j]>='0'&&a[j]<='9')
{
sz[m]=a[j];
m++;
}
else
{
fh[n]=a[j];
n++;
}
}
sum=k+l+m+n;
while(k--)
    {
        ZM0++;
        if(ZM[k]==ZM[k-1])
            ZM0--;
    }
    while(l--)
    {
        zm0++;
        if(zm[l]==zm[l-1])
            zm0--;
    }
    while(m--)
    {
        sz0++;
        if(sz[m]==sz[m-1])
            sz0--;
    }
    while(n--)
    {
        fh0++;
        if(fh[n]==fh[n-1])
            fh0--;
    }
if(sum>=16&&ZM0>=2&&zm0>=2&&sz0>=2&&fh0>=2)
printf("%d Best\n",sum);
else if(sum>=10&&ZM0>=1&&zm0>=1&&sz0>=1&&fh0>=1)
printf("%d Strong\n",sum);
else if(sum>=8&&((ZM0>=1&&zm0>=1&&sz0>=1)||(zm0>=1&&ZM0>=1&&fh0>=1)||(zm0>=1&&sz0>=1&&fh0>=1)))
printf("%d Medium\n",sum);
else
printf("%d Weak\n",sum);
return 0;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved