题略
这个最关键的是读懂题目的意思
总结下来,总共有两种模式
1)PAT模式:中间的A可以有一个,也可以有很多个,但A的个数不能为0
2)乘法模式:①位置上A的个数 * ②位置上A的个数 = ③位置上A的个数
代码设计思路:
1.如何收集输入数据
定义二维数组a[10][100],利用for循环输入
//每个测试输入包含 1 个测试用例。第 1 行给出一个正整数 n (≤10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过 100,且不包含空格。
char a[10][100];
int i,n;
cin>>n;
for(i = 0;i < n;i++)
cin>>a[i];
2.创建PAT函数
函数的功能:输入一维数组a[ ] ,判断a[ ] 是否符合PAT模式,若符合,返回’Y’,否则返回’N’。
char patMode(char a[]){
int len = strlen(a);
if(a[0] == 'P'){
if(a[len - 1] == 'T'){
for(int i = 1;i < len - 1;i++){
if(a[i] == 'A'){
if(i == len - 2)
return 'Y';
else
continue;
}
else
return 'N';
}
}
else
return 'N';
}
else
return 'N';
}
3.创建multi函数
函数功能:输入一维数组a[ ] ,判断a[ ] 是否符合乘法模式,若符合,返回’Y’,否则返回’N’。
char multiMode(char a[]){
int len = strlen(a);
int i,j,k,m;
for(int i = 0;i < len;i++){
if(a[i] == 'A'){
if(i == len - 1){
if((i - m) == (j * k))
return 'Y';
else
return 'N';
}
else
continue;
}
else if(a[i] == 'P'){ //i个A
j = i;
i++;
continue;
}
else if(a[i] == 'T'){
m = i;
k = i - j - 1;
i++;
continue;
}
else
return 'N';
}
}
4.主函数调用
int main(){
char a[10][100];
int i,n;
//每个测试输入包含 1 个测试用例。第 1 行给出一个正整数 n (≤10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过 100,且不包含空格。
cin>>n;
for(i = 0;i < n;i++)
cin>>a[i];
for(i = 0;i < n;i++){
if(patMode(a[i]) == 'Y' || multiMode(a[i]) == 'Y'){
cout<<"YES"<<endl;
continue;
}
else {
cout<<"NO"<<endl;
continue;
}
}
}
完整代码如下:
#include<iostream>
#include<string.h>
using namespace std;
/*PAT模式:中间的A可以有一个,也可以有很多个,但A的个数不能为0*/
char patMode(char a[]){
int len = strlen(a);
if(a[0] == 'P'){
if(a[len - 1] == 'T'){
for(int i = 1;i < len - 1;i++){
if(a[i] == 'A'){
if(i == len - 2)
return 'Y';
else
continue;
}
else
return 'N';
}
}
else
return 'N';
}
else
return 'N';
}
/*乘法模式:1位置上A的个数 * 2位置上A的个数 = 3位置上A的个数
AAPAATAAAA
*/
char multiMode(char a[]){
int len = strlen(a);
int i,j,k,m;
for(int i = 0;i < len;i++){
if(a[i] == 'A'){
if(i == len - 1){
if((i - m) == (j * k))
return 'Y';
else
return 'N';
}
else
continue;
}
else if(a[i] == 'P'){ //i个A
j = i;
i++;
continue;
}
else if(a[i] == 'T'){
m = i;
k = i - j - 1;
i++;
continue;
}
else
return 'N';
}
}
int main(){
char a[10][100];
int i,n;
//每个测试输入包含 1 个测试用例。第 1 行给出一个正整数 n (≤10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过 100,且不包含空格。
cin>>n;
for(i = 0;i < n;i++)
cin>>a[i];
for(i = 0;i < n;i++){
if(patMode(a[i]) == 'Y' || multiMode(a[i]) == 'Y'){
cout<<"YES"<<endl;
continue;
}
else {
cout<<"NO"<<endl;
continue;
}
}
}