题目
小码哥在是一位密码领域的初学者,有一天他的老师给他了一串密码,要他判断这个密码是否是强密码,老师和他说强密码就是需要同时达到以下要求:
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;
}