马蹄集第43周

文章讲述了小码哥面临的密码判断任务,需检查密码是否满足长度、字符类型分布及数字间不连续的要求。同时介绍了小码哥自创的加密算法,涉及字母与数字之间的转换,以及连续字符的处理规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

小码哥在是一位密码领域的初学者,有一天他的老师给他了一串密码,要他判断这个密码是否是强密码,老师和他说强密码就是需要同时达到以下要求:
1.密码长度大于6.
2.密码中同时包括了大小写字母和数字。
3.并且数字和数字之间不能相连。
现在有一个长度为N(1≤N≤100000)的密码串,你能帮他判断这个密码串是不是
强密码吗?

解题代码


def main():
    s = input()
    length = len(s)
    if length <= 6:
        print("False")
        return
    hasUpper = False
    hasLower = False
    hasDigit = False
    for element in s:
        if element.isupper():
            hasUpper = True
        elif element.islower():
            hasLower = True
        elif element.isdigit():
            hasDigit = True

    if not(hasDigit and hasLower and hasUpper):
        print("False")
        return
    for i in range(1,length):
        if s[i].isdigit() and s[i - 1].isdigit():
            print("False")
            return
    print("True")





if __name__ == '__main__':
    main();

题目描述

小码对密码学很感兴趣,他自己发明了一种加密算法:
(1)字母a使用数字0表示,字母b使用数字1表示,字母z使用数字25表示,字母ba使用数字26表示,字母bb使用数字27表示,字母bz使用数字51表示。字母ca使用数字52表示,依次类推。
(2)和上面的完全相反,数字0使用字母a表示,数字1使用字母b表示,数字25使用字母z表示,数字26使用字母ba表示,数字27使用字母bb表示,数字51使用字母bz表示,数字52使用字母ca表示,依次类推。
(3)对于连续的字母或者数字,按照上面的规律将字母转为数字,数字转为字母。
(4)连续的数字最长不超过各语言长整型能约够表示的大小,字母转换来的数字也不超过各语言长整型能够表示的大小。
(5)特别强调的是,连续的数字不会以0开头,连续的字母不会以开头。
请编写一个程序,帮他完成这个加密过程。

解题代码

:一些看不懂的代码

#include<bits/stdc++.h> 

using namespace std;

string s,temp,ans;

int StoI(string s){
    int len = s.length(),temp = 0;
    for(int i = 0; i < len; i++){
        temp = temp * 10 + s[i] - '0';
    }
    return temp;
}

string ItoS(int n){//int类型123转化字符串“123”
    string temp = "";
    if(n == 0){
        temp = "0";
    }
    while (n){
        temp = (char)(n % 10 + '0') + temp;
        n = n / 10;
    }
    return temp;
}

string convert(string s){
    string ss = "";
    if (isdigit(s[0])){//数字转化成字母
        int temp = StoI(s);
        if(temp == 0){
            ss = "a";
        }
        while(temp){
            ss = (char)(temp % 26 + 'a') + ss;
            temp = temp / 26;
        }
    }else{
        int temp = 0;
        for(int i = 0; i < s.length() ;i++){
            temp = temp * 26 + s[i] - 'a';
        }
        ss = ItoS(temp);
    }
    return ss;
}
int main(){
    cin >> s;
    int len = s.length();
    s = "#" + s;
    for (int i = 1; i <= len; i++){
        if(isdigit(s[i - 1]) && isdigit(s[i]) ||
        isalpha(s[i - 1]) && isalpha(s[i])){
            temp = temp + s[i];
        }else{
            if(temp != ""){
                ans += convert(temp);
            }
            temp = s[i];
        }
    }
    ans += convert(temp);
    cout << ans;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值