logo Algo Beat Contest
登录 注册

[Algo Beat Contest 005 A] 应试玉符 题解(思路分析 + 完整代码)

作者: Leo_29  ·  发布于 2026-05-08 22:25:41  ·  最后修改于 2026-05-08 23:28:44
已通过

[Algo Beat Contest 005 A] 应试玉符 题解

主要题意

给你一个账号字符串和一个密码字符串,判断它们是否合法。

账号字符串合法的条件为:

  1. 形式为 ZJ-a
  2. a 是一个正整数,满足
  3. a 长度不足 位,要用前导零补足。

密码字符串合法的条件为:

  1. 长度不小于
  2. 包含大写和小写字符
  3. 包含数字

解题思路

这是一道入门的字符串处理题目。

我们按照上面所述的顺序进行判断:

首先要前三位是 ZJ-,然后后面的数字按条件进行判断即可。如果不满足这些,直接输出 Wrong Name

如果账号符合条件,就判断密码是否符合条件。我们遍历全串,判断所有条件是否符合就行了。若任意一个条件不符合,就输出 Wrong Password

否则,说明账号和密码字符串都合法,输出 Accept

代码部分

#include <bits/stdc++.h>
using namespace std;

int main()
{
	int T;
	cin >> T;
	while(T --)
	{
		string n, p;
		cin >> n >> p;
		if(!(n[0] == 'Z' && n[1] == 'J' && n[2] == '-') || !(n.length() == 7))//开头格式错误或账号长度错误 
		{
			cout << "Wrong Name" << endl;
			continue;
		}
		bool fg = 0;
		int cnt = 0;
		for(int i = 3;i < n.length();i ++)
		{
			if(!(n[i] >= '0' && n[i] <= '9'))//出现非数字字符,说明一定不符合条件 
			{
				cout << "Wrong Name" << endl;
				fg = 1;
				break;				
			}
			cnt = cnt * 10 + (n[i] - '0');
		}
		if(fg)
			continue;
		if(!(cnt >= 1 && cnt <= 9999))//账号不符合条件 
		{
			cout << "Wrong Name" << endl;
			continue;
		}
		bool f1 = 0, f2 = 0, f3 = 0;
		for(int i = 0;i < p.length();i ++)
		{
			if(p[i] >= 'A' && p[i] <= 'Z')//大写字母 
				f1 = 1;
			if(p[i] >= 'a' && p[i] <= 'z')//小写字母 
				f2 = 1;
			if(p[i] >= '0' && p[i] <= '9')//数字 
				f3 = 1;
		}
		if(!f1 || !f2 || !f3 || p.size() < 6)//密码不符合条件 
			cout << "Wrong Password" << endl;
		else
			cout << "Accept" << endl;
	}
	return 0;
}

暂无评论

登录 后即可评论。