我的代码如下,PAC是因为this's0909在这里判断的是VERY_STRONG,而我是STRONG
题目如下
一、密码长度:
5 分: 小于等于4 个字符
10 分: 5 到7 字符
25 分: 大于等于8 个字符
二、字母:
0 分: 没有字母
10 分: 全都是小(大)写字母
20 分: 大小写混合字母
三、数字:
0 分: 没有数字
10 分: 1 个数字
20 分: 大于1 个数字
四、符号:
0 分: 没有符号
10 分: 1 个符号
25 分: 大于1 个符号
五、奖励:
2 分: 字母和数字
3 分: 字母、数字和符号
5 分: 大小写字母、数字和符号
最后的评分标准:
大于等于90: VERY_SECURE
大于等于80: SECURE
大于等于70: VERY_STRONG
大于等于 60: STRONG
大于等于 50: AVERAGE
大于等于 25: WEAK
大于等于0: VERY_WEAK
#include
#include
int main(){
int n,fen=0,i,z=0,Z=0,sh=0,f=0,j=0;
char s[10005];
scanf("%s",s);
n=strlen(s);
if(n<=4) fen+=5;
else if(n>=5&&n<=7) fen+=10;
else if(n>=8) fen+=25;
for(i=0;iif(s[i]>='a'&&s[i]<='z') z++;
else if(s[i]>='A'&&s[i]<='Z') Z++;
else if(s[i]>='0'&&s[i]<='9') sh++;
else f++;
}
if((z!=0&&Z==0)||(z==0&&Z!=0)) fen+=10;
else if(z!=0&&Z!=0) fen+=20;
if(sh==1) fen+=10;
else if(sh>1) fen+=20;
if(f==1) fen+=10;
else if(f>1) fen+=25;
if(f==0&&sh!=0&&(z!=0||Z!=0)) fen+=2;
else if(f!=0&&sh!=0&&z!=0&&Z==0) fen+=3;
else if(f!=0&&sh!=0&&z==0&&Z!=0) fen+=3;
else if(f!=0&&sh!=0&&z!=0&&Z!=0) fen+=5;
if(fen>=0&&fen<25) printf("VERY_WEAK\n");
else if(fen>=25&&fen<50) printf("WEAK\n");
else if(fen>=50&&fen<60) printf("AVERAGE\n");
else if(fen>=60&&fen<70) printf("STRONG\n");
else if(fen>=70&&fen<80) printf("VERY_STRONG\n");
else if(fen>=80&&fen<90) printf("SECURE\n");
else if(fen>=90) printf("VERY_SECURE\n");
return 0;
}
请大家帮我看看为什么,谢谢了
应该是因为奖励部分那里错了,根据this's0909是VERY_STRONG,则分数必须大于等于70,通过计算,发现奖励部分如果满足条件需要重复计算才能大于等于70分,所以把奖励部分的判断修改下即可,修改如下:
#include<stdio.h>
#include<string.h>
int main(){
int n,fen=0,i,z=0,Z=0,sh=0,f=0,j=0;
char s[10005];
scanf("%s",s);
n=strlen(s);
if(n<=4) fen+=5;
else if(n>=5&&n<=7) fen+=10;
else if(n>=8) fen+=25;
for(i=0;i<n;i++){
if(s[i]>='a'&&s[i]<='z') z++;
else if(s[i]>='A'&&s[i]<='Z') Z++;
else if(s[i]>='0'&&s[i]<='9') sh++;
else f++;
}
if((z!=0&&Z==0)||(z==0&&Z!=0)) fen+=10;
else if(z!=0&&Z!=0) fen+=20;
if(sh==1) fen+=10;
else if(sh>1) fen+=20;
if(f==1) fen+=10;
else if(f>1) fen+=25;
//奖励
if(sh!=0&&(z!=0||Z!=0)) fen+=2;
if(f!=0&&sh!=0&&(z!=0||Z!=0)) fen+=3;
if(f!=0&&sh!=0&z!=0&&Z!=0) fen+=5;
// printf("fen=%d\n",fen);
if(fen>=0&&fen<25) printf("VERY_WEAK\n");
else if(fen>=25&&fen<50) printf("WEAK\n");
else if(fen>=50&&fen<60) printf("AVERAGE\n");
else if(fen>=60&&fen<70) printf("STRONG\n");
else if(fen>=70&&fen<80) printf("VERY_STRONG\n");
else if(fen>=80&&fen<90) printf("SECURE\n");
else if(fen>=90) printf("VERY_SECURE\n");
return 0;
}
#include <stdio.h>
#include <ctype.h>
int main()
{
// 定义变量
char password[100]; // 密码
int length = 0; // 密码长度
int score = 0; // 密码评分
int num_letter = 0; // 密码中字母的数量
int num_digit = 0; // 密码中数字的数量
int num_symbol = 0; // 密码中符号的数量
int has_lower = 0; // 密码中是否包含小写字母
int has_upper = 0; // 密码中是否包含大写字母
// 输入密码
printf("请输入密码:");
scanf("%s", password);
// 计算密码长度
for (int i = 0; password[i] != '\0'; i++)
{
length++;
}
// 评分:密码长度
if (length <= 4)
{
score += 5;
}
else if (length >= 5 && length <= 7)
{
score += 10;
}
else
{
score += 25;
}
// 评分:字母
for (int i = 0; password[i] != '\0'; i++)
{
if (isalpha(password[i]))
{
num_letter++;
if (islower(password[i]))
{
has_lower = 1;
}
else
{
has_upper = 1;
}
}
}
if (num_letter == 0)
{
score += 0;
}
else if (has_lower == 0 || has_upper == 0)
{
score += 10;
}
else
{
score += 20;
}
// 评分:数字
for (int i = 0; password[i] != '\0'; i++)
{
if (isdigit(password[i]))
{
num_digit++;
}
}
if (num_digit == 0)
{
score += 0;
}
else if (num_digit == 1)
{
score += 10;
}
else
{
score += 20;
}
// 评分:符号
for (int i = 0; password[i] != '\0'; i++)
{
if (!isalnum(password[i]))
{
num_symbol++;
}
}
if (num_symbol == 0)
{
score += 0;
}
else if (num_symbol == 1)
{
score += 10;
}
else
{
score += 25;
}
// 评分:奖励
if (num_letter > 0 && num_digit > 0 && num_symbol == 0)
{
score += 2;
}
else if (num_letter > 0 && num_digit > 0 && num_symbol > 0)
{
score += 3;
}
else if (num_letter > 0 && num_digit > 0 && num_symbol > 0 && has_lower == 1 && has_upper == 1)
{
score += 5;
}
// 输出结果
if (score >= 90)
{
printf("VERY_SECURE");
}
else if (score >= 80)
{
printf("SECURE");
}
else if (score >= 70)
{
printf("VERY_STRONG");
}
else if (score >= 60)
{
printf("STRONG");
}
else if (score >= 50)
{
printf("AVERAGE");
}
else if (score >= 25)
{
printf("WEAK");
}
else
{
printf("VERY_WEAK");
}
return 0;
}