【C++】1003 我要通过!(20分)

我做了个pta乙级题解的专栏,欢迎来专栏看哦~

分析在代码中的注释里,尤其是对题中“如果 aPbTc 是正确的,那么 aPbATca 也是正确的”这句话的分析。(这句话是我起初无法理解的。)

C++

#include <iostream>
#include <string>
#include <array>
using namespace std;

array<string, 10> testStr = {};

bool isTrue(string x)
{
	unsigned countPreX = 0; // 对于条件2 前面的字符串x长度
	unsigned countLatX = 0; // 对于条件2 后面的字符串x长度
	unsigned count1 = 0; // 对于条件3 P之前的A字符串长度
	unsigned count2 = 0; // 对于条件3 P T之间A的长度
	unsigned count3 = 0; // 对于条件3 T之后的A的长度
	size_t i, flag;
	int p_ = x.find("P");//P所在位置
	int t_ = x.find("T");//T所在位置

	if ((-1 == p_) || (-1 == t_) // P或T不存在
		|| (p_ > t_)) // P T位置不对
	{
		return false;
	}

	// 检测条件1
	for (size_t j = 0; j < x.size(); j++)
	{
		if (x[j] != 'P' && x[j] != 'A' && x[j] != 'T')
		{
			return false;
		}
	}

	// 检测条件2 & 检测条件3 一同检测

	/* 检测条件3 : 条件3中所说的“如果aPbTc正确” 是对于条件2来说的,【之前总是无法理解这句话来着“如果 aPbTc 是正确的,那么 aPbATca 也是正确的”】
			也就是说,条件2中正确的“PAT”,通过条件3-->可以得出正确的还有:PAAT/PAAAT.....
								APATA		-->		APAATAA/APAAATAAA/APAAAATAAAA.....
							   AAPATAA      -->		AAPAATAAAA/AAPAAATAAAAAA......
							   .
							   .
							   .
	最终结论:P之前的A的个数count1 P、T之间的A个数count2  T之后的A个数count3关系如下:
		count3 = count2 * count1【终于得到这个结论了,距离第一次做这一题,已经过去几个月了。。】
		但要注意用例:PT(不通过)
	*/

	// 计算count1
	for (i = 0; i < x.size(); i++) // 计算PAT前面的字符长度
	{
		if (x[i] != 'P')
		{
			if (x[i] != 'A')
			{
				return false;
			}
			count1++;
		}
		else
		{
			break;
		}
	}

	// 计算count2
	for (i = i + 1; i < x.size(); i++)
	{
		if (x[i] != 'T')
		{
			if (x[i] != 'A')
			{
				return false;
			}
			count2++;
		}
		else
		{
			break;
		}
	}

	// 计算count3
	for (i = i + 1; i < x.size(); i++)
	{
		if (x[i] != 'A')
		{
			return false;
		}
		count3++;
	}

	if (count1 * count2 == count3 && count2 != 0)
	{
		return true;
	}
	else
	{
		return false;
	}
}

int main()
{
	unsigned n;

	cin >> n;

	for (size_t i = 0; i < n; i++)
	{
		cin >> testStr[i];
	}

	for (size_t i = 0; i < n; i++)
	{
		if (i)
		{
			cout << "\n";
		}
		if (isTrue(testStr[i]))
		{
			cout << "YES";
		}
		else
		{
			cout << "NO";
		}
	}

	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要通过姓名查找学生信息,你需要有一个存储学生信息的数据结构,比如数组或链表。然后,你可以根据学生的姓名来查找需要的学生信息。 以下是一个使用数组存储学生信息并通过姓名查找学生的示例代码: ```c++ #include <iostream> #include <string> using namespace std; struct Student { string name; int id; int age; }; int main() { const int MAX_STUDENTS = 100; Student students[MAX_STUDENTS]; int numStudents = 0; // 添加学生信息 students[numStudents++] = {"Tom", 1001, 18}; students[numStudents++] = {"Jerry", 1002, 19}; students[numStudents++] = {"Alice", 1003, 20}; // 根据姓名查找需要的学生 string nameToFind = "Jerry"; bool found = false; for (int i = 0; i < numStudents; i++) { if (students[i].name == nameToFind) { cout << "Found student:" << endl; cout << "Name: " << students[i].name << endl; cout << "ID: " << students[i].id << endl; cout << "Age: " << students[i].age << endl; found = true; break; } } if (!found) { cout << "Student with name " << nameToFind << " not found" << endl; } return 0; } ``` 在上面的示例代码中,我们首先定义了一个 `Student` 结构体来表示学生信息,然后使用一个数组 `students` 来存储学生信息。我们使用 `numStudents` 变量来记录数组中当前存储的学生数量。 接着,我们添加了三个学生的信息到数组中。然后,我们根据姓名查找需要的学生,并输出其信息。 注意,上面的示例代码仅仅是一个演示,实际项目中你需要根据具体的需求来设计更加完善的通过姓名查找学生信息的实现。另外,在实际项目中,如果你需要频繁进行学生信息的查找操作,可能需要使用更加高效的数据结构,比如哈希表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值