这道题,我看到大家做的情况我就知道不简单
WA惨无人道啊
所以这就是今天这个随笔的内容
先看题目
一些网站在设置密码的时候都会判断你的密码是否为弱密码,通常从字符种类,密码长度等作为判断的依据。但是有的时候密码中包含连续的数字也是弱密码,例如 Aa123456789 这样的密码也应该被判定为弱密码。现在需要你来实现一个程序,用于判断一个字符串里面是否有连续的数字。
连续数字的定义:
- 一直递增的数字,且每次只递增 1;或者一直递减,且每次递减 1,例如 123,34567 ,7654 等。注意 343,3456765 不是连续数字,因为没有一直递增或者一直递减;12456 也不是连续数字,因为中间的 2 和 4 不是递增 1,而是增加了 2;78910 不是连续数字,注意 9 后面不能和 0 或者 10 相连。
- 长度大于等于 3,例如 12 不被判定为连续数字,因为它的长度太短了。
输入格式
第一行输入一行一个正整数 t,表示测试数据的组数(1≤t≤1000)
接下来 t 行,每行一个长度不超过 20 的字符串,表示一个密码,密码均由可见字符组成,不包含空格和换行符。
输出格式
对于每一组测试数据,输出 yes 或者 no(均为小写)表示给定的密码中是否至少含有一段连续的数字。
输入数据 1
4
abc123aee22
abc12321a
lxsb321yyy
flww12345677
输出数据 1
yes
no
yes
no
说明
第一个样例包含两段数字,分别是 123 和 22,其中 123 是连续数字,所以输出 yes。
第二个样例包含一段连续的数字是 12321,根据定义,这段数字不是一直递增也不是一直递减,所以不是连续的数字,输出 no。
第三个样例包含一段数字 321,是连续数字,输出 yes。
第四个样例包含一段数字 12345677,最后两个不是递增,所以输出 no。
思路:
这道题只要以字母分段,然后提出数字,最后判断递增或递减就可以了
代码:
#include <iostream> #include <string> using namespace std;bool isConsecutive(string digit) { if (digit.length() < 3) { return false; }
bool isIncreasing = true; bool isDecreasing = true;
for (int i = 1; i < digit.length(); i++) { if (digit[i] != digit[i - 1] + 1) { isIncreasing = false; } if (digit[i] != digit[i - 1] - 1) { isDecreasing = false; } }
return isIncreasing || isDecreasing; }
int main() { int t; cin >> t;
while (t--) { string password; cin >> password;
string digit; bool hasConsecutive = false;
for (char c : password) { if (isdigit(c)) { digit += c; } else { if (isConsecutive(digit)) { hasConsecutive = true; break; } digit = ""; } }
if (isConsecutive(digit)) { hasConsecutive = true; }
if (hasConsecutive) { cout << "yes" << endl; } else { cout << "no" << endl; } }
return 0; }
我一开始一直在判断连起来的数字,所以一直出错,我真(lll¬ω¬)
标签:digit,数字,密码,递增,检验,P1043,连续,yes From: https://www.cnblogs.com/zhangxiaodiWW/p/17631250.html