HJ87密码等级

这个题目就是细心处理一下就行,比较简单

cpp 复制代码
#include <ctype.h>
#include <stdio.h>
#include <stdbool.h>

void PrintLevel(unsigned int score)
{
    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 if(score >= 0)
    {
        printf("VERY_WEAK");
    }
}

int GetScoreByStrlen(int *score, unsigned int len)
{
    if(len <= 4)
    {
        *score = 5;
    }else if(len <= 7)
    {
        *score = 10;
    }
    else {
        *score = 25;
    }
    return 0;
}

int GetScoreByCharacter(int *score, char* array, int len)
{
    bool withAlphaFlag = false;
    bool alphaWithLowerFlag = false;
    bool alphaWithUpperFlag = false;

    bool withDigitFlag = false;
    int digitCount = 0;

    bool withCharacterFlag = false;
    int characterCount = 0;

    for(int i = 0; i < len; i++)
    {
        if(isalpha(array[i]))
        {
            withAlphaFlag = true;
            if(array[i] >= 'a' && array[i] <= 'z')
            {
                alphaWithLowerFlag = true;
            }
            if(array[i] >= 'A' && array[i] <= 'Z')
            {
                alphaWithUpperFlag = true;
            }
        }
        else if(isdigit(array[i]))
        {
            withDigitFlag = true;
            digitCount++;
        }
        else {
            withCharacterFlag = true;
            characterCount++;
        }
    }

    int alphaScore = 0;
    if(!withAlphaFlag)
    {
        alphaScore = 0;
    }else {
        if(alphaWithLowerFlag && alphaWithUpperFlag)
        {
            alphaScore = 20;
        }
        else {
            alphaScore = 10;
        }
    }
    *score += alphaScore;

    int digitScore = 0;
    if(!withDigitFlag)
    {
        digitScore = 0;
    }else {
        if(digitCount == 1)
        {
            digitScore = 10;
        }
        else {
            digitScore = 20;
        }
    }
    *score += digitScore;

    int characterScore = 0;
    if(!withCharacterFlag)
    {
        characterScore = 0;
    }else {
        if(characterCount == 1)
        {
            characterScore = 10;
        }
        else {
            characterScore = 25;
        }
    }
    *score += characterScore;

    int specialScore = 0;
    if(alphaWithLowerFlag && alphaWithUpperFlag && withDigitFlag && withCharacterFlag)
    {
        specialScore = 5;
    }
    else if(withAlphaFlag && withDigitFlag && withCharacterFlag)
    {
        specialScore = 3;
    }
    else if(withAlphaFlag && withDigitFlag)
    {
        specialScore = 2;
    }
    *score += specialScore;

    return 0;
}

int main() {
    char strArray[301] = {'\0'};
    while (scanf("%s",strArray) != EOF) { // 注意 while 处理多个 case
        // 64 位输出请用 printf("%lld") to 
        int score = 0;
        
        int len = strlen(strArray);
        GetScoreByStrlen(&score, len);
        GetScoreByCharacter(&score, strArray, len);
        PrintLevel(score);
    }
    return 0;
}
相关推荐
wayz1113 分钟前
Momentum:PSL(心理线指标)技术指标详解
算法·金融·数据分析·量化交易·特征工程
8Qi81 小时前
LeetCode 213:打家劫舍 II(House Robber II)—— 题解 ✅
算法·leetcode·职场和发展·动态规划
三品吉他手会点灯1 小时前
C语言学习笔记 - 44.运算符和表达式 - 运算符2 - 除法与取余运算符
c语言·开发语言·笔记·算法
乐迪信息1 小时前
乐迪信息:AI算法盒子实时识别船舶烟雾与火焰异常
大数据·人工智能·算法·安全·目标跟踪
J-Tony111 小时前
【JVM】根可达算法
jvm·算法
艾iYYY1 小时前
string 类的模拟实现
android·服务器·c语言·c++·算法
Lsk_Smion2 小时前
力扣实训 _ [75].颜色分类 _ 杨辉三角
数据结构·算法·leetcode
jidaowansui3 小时前
P11375 [GESP202412 六级] 树上游走
数据结构·算法
hai3152475434 小时前
FlashAttention C语言(C++)实现(展示版)
c语言·开发语言·c++·人工智能·算法