洛谷P10906 [蓝桥杯 2024 国 B] 合法密码
P10906 [蓝桥杯 2024 国 B] 合法密码
题目描述
小蓝正在开发自己的 OJ 网站。他要求网站用户的密码必须符合以下条件:
- 长度大于等于 \(8\) 个字符,小于等于 \(16\) 个字符。
- 必须包含至少 \(1\) 个数字字符和至少 \(1\) 个符号字符。
例如 lanqiao2024!、+-*/0601、8((>w<))8 都是合法的密码。
而 12345678、##**##**、abc0!#、lanqiao20240601!? 都不是合法的密码。
请你计算以下的字符串中,有多少个子串可以当作合法密码?只要两个子串的开头字符和末尾字符在原串中的位置不同,就算作不同的子串。
字符串为:
kfdhtshmrw4nxg#f44ehlbn33ccto#mwfn2waebry#3qd1ubwyhcyuavuajb#vyecsycuzsmwp31ipzah#catatja3kaqbcss2th
输入格式
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
输出格式
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
题目链接
https://www.luogu.com.cn/problem/P10906
解题思路
- 函数is判断是否满足数字和符号要求,调用isdigit和isalpha
- main函数中调用substr截取子串满足条件ans+1即可
代码实现
// 模拟
#include<bits/stdc++.h>
using namespace std;
int ans;
bool is(string t){
bool flag=false;
for(auto ch:t){
if(isdigit(ch))flag=true;
}
if(!flag)return false;
for(auto ch:t){
if(isdigit(ch)||isalpha(ch))continue;
return true;
}
return false;
}
int main()
{
string str;cin>>str;
for(int i=0;i<str.size();i++){
for(int len=8;len<=16;len++){
string tmp=str.substr(i,len);
if(is(tmp))ans++;
}
}
cout<<ans;
return 0;
}
浙公网安备 33010602011771号