您的位置:首页 > 其它

华为OJ训练之0034-170112-密码强度等级

2017-05-12 15:17 337 查看

题目

密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。

一、密码长度:

5 分: 小于等于4 个字符

10 分: 5 到7 字符

25 分: 大于等于8 个字符

二、字母:

0 分: 没有字母

10 分: 全都是小(大)写字母

20 分: 大小写混合字母

三、数字:

0 分: 没有数字

10 分: 1 个数字

20 分: 大于1 个数字

四、符号:

0 分: 没有符号

10 分: 1 个符号

25 分: 大于1 个符号

五、奖励:

2 分: 字母和数字

3 分: 字母、数字和符号

5 分: 大小写字母、数字和符号

最后的评分标准:

= 90: 非常安全

= 80: 安全(Secure)

= 70: 非常强

= 60: 强(Strong)

= 50: 一般(Average)

= 25: 弱(Weak)

= 0: 非常弱

对应输出为:

VERY_WEAK,

WEAK,

AVERAGE,

STRONG,

VERY_STRONG,

SECURE,

VERY_SECURE

请根据输入的密码字符串,进行安全评定。
注:
字母:a-z, A-Z
数字:-9
符号包含如下: (ASCII码表可以在UltraEdit的菜单view->ASCII Table查看)
!"#$%&'()*+,-./     (ASCII码:x21~0x2F)
:;<=>?@             (ASCII<=><=><=><=><=>码:x3A~0x40)
[\]^_`              (ASCII码:x5B~0x60)


{|}~ (ASCII码:x7B~0x7E)

接口描述:

Input Param

String pPasswordStr: 密码,以字符串方式存放。

Return Value

根据规则评定的安全等级。

public static Safelevel GetPwdSecurityLevel(String pPasswordStr)

{

/在这里实现功能/

return null;

}

知识点 枚举

运行时间限制 10M

内存限制 128

输入

输入一个string的密码

输出

输出密码等级

样例输入 38$@NoNoNo

样例输出 VERY_SECURE

============================================================

三次答案错误

完全不理解哪错了

============================================================

package package02;

import java.util.Scanner;

//密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。
//一、密码长度:
//5 分: 小于等于4 个字符
//10 分: 5 到7 字符
//25 分: 大于等于8 个字符
//二、字母:
//0 分: 没有字母
//10 分: 全都是小(大)写字母
//20 分: 大小写混合字母
//三、数字:
//0 分: 没有数字
//10 分: 1 个数字
//20 分: 大于1 个数字
//四、符号:
//0 分: 没有符号
//10 分: 1 个符号
//25 分: 大于1 个符号
//五、奖励:
//2 分: 字母和数字
//3 分: 字母、数字和符号
//5 分: 大小写字母、数字和符号
//最后的评分标准:
//>= 90: 非常安全
//>= 80: 安全(Secure)
//>= 70: 非常强
//>= 60: 强(Strong)
//>= 50: 一般(Average)
//>= 25: 弱(Weak)
//>= 0:  非常弱
//
//对应输出为:
//VERY_WEAK,
//WEAK,
//AVERAGE,
//STRONG,
//VERY_STRONG,
//SECURE,
//VERY_SECURE
//
//
//请根据输入的密码字符串,进行安全评定。
//注:
//字母:a-z, A-Z
//数字:-9
//符号包含如下: (ASCII码表可以在UltraEdit的菜单view->ASCII Table查看)
//!"#$%&'()*+,-./     (ASCII码:x21~0x2F)
//:;<=>?@             (ASCII<=><=><=><=><=>码:x3A~0x40)
//[\]^_`              (ASCII码:x5B~0x60)
//{|}~                (ASCII码:x7B~0x7E)
//接口描述:
//
//Input Param
//String pPasswordStr:    密码,以字符串方式存放。
//Return Value
//根据规则评定的安全等级。
//
//
//public static Safelevel GetPwdSecurityLevel(String pPasswordStr)
//{
///*在这里实现功能*/
//return null;
//}
//
//
//
//知识点   枚举
//运行时间限制    10M
//内存限制  128
//输入
//输入一个string的密码
//输出
//输出密码等级
//样例输入  38$@NoNoNo
//样例输出  VERY_SECURE
public class oj034 {

public int getPassWordScore(String password)
{
int score=0;
//       一、密码长度:
//             5 分: 小于等于4 个字符
//             10 分: 5 到7 字符
//             25 分: 大于等于8 个字符
int length=password.length();
if(length<=4){score+=5;}
if(length>=5&&length<=7){score+=10;}
if(length>=8){score+=25;}

int word=0;
int WORD=0;
int number=0;
int sign=0;
for(int i=0;i<length;i++)
{
char c=password.charAt(i);
if('a'<=c&&c<='z'){word++;}
else if('A'<=c&&c<='Z'){WORD++;}
else if('0'<=c&&c<='9'){number++;}
else {sign++;}
}
//       二、字母:
//         0 分: 没有字母
if(word==0&&WORD==0) {score+=0;}
//         10 分: 全都是小(大)写字母
else if(word==0||WORD==0) {score+=10;}
//         20 分: 大小写混合字母
else if(word!=0&&WORD!=0) {score+=20;}

//       三、数字:
//             0 分: 没有数字
if(number==0) {score+=0;}
//             10 分: 1 个数字
if(number==1) {score+=10;}
//             20 分: 大于1 个数字
if(number>1) {score+=20;}

//      四、符号:
//             0 分: 没有符号
if(number==0) {score+=0;}
//             10 分: 1 个符号
if(number==1) {score+=10;}
//             25 分: 大于1 个符号
if(number>1) {score+=25;}

//             五、奖励:

//             5 分: 大小写字母、数字和符号
if(number!=0&&sign!=0&&word!=0&&WORD!=0){score+=5;}

//             3 分: 字母、数字和符号
else if((word+WORD)!=0&&number!=0&&sign!=0){score+=3;}
//                 2 分: 字母和数字
else if((word+WORD)!=0&&number!=0){score+=2;}

return score;

}

public static void main(String[] args) {

Scanner scanner=new Scanner(System.in);
String password=scanner.nextLine();

oj034 oj=new oj034();
int score=oj.getPassWordScore(password);
//      >= 90: 非常安全
//                 >= 80: 安全(Secure)
//                 >= 70: 非常强
//                 >= 60: 强(Strong)
//                 >= 50: 一般(Average)
//                 >= 25: 弱(Weak)
//                 >= 0:  非常弱
//
//          对应输出为:
//            VERY_WEAK,
//             WEAK,
//             AVERAGE,
//             STRONG,
//             VERY_STRONG,
//             SECURE,
//             VERY_SECURE
if(score>=90)
{
System.out.print("VERY_SECURE");
}
else  if(score>=80)
{
System.out.print("SECURE");
}
else  if(score>=70)
{
System.out.print("VERY_STRONG");
}
else  if(score>=60)
{
System.out.print("STRONG");
}
else  if(score>=50)
{
System.out.print("AVERAGE");
}
else  if(score>=25)
{
System.out.print("WEAK");
}
else
{
System.out.print("VERY_WEAK");
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: