33,311
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
int main()
{
int n, flag, p, t;
int cont_a, cont_b, cont_c;
char a[105];
scanf("%d" ,&n);
getchar();
while(n--)
{
p = 0;
t = 0;
flag = 1;
cont_a = 0;
cont_b = 0;
cont_c = 0;
scanf("%s" ,a);
for (int i=0; a[i]!='\0'; i++)
{
if(a[i] != 'A' && a[i] != 'T' && a[i] != 'P')
{
printf("NO\n");
flag = 0;
break;
}
if(a[i] == 'P')
{
p++;
if(p==2)
{
printf("NO\n");
flag = 0;
break;
}
}
if(a[i] == 'T')
{
t++;
if(t==2 || p==0)
{
printf("NO\n");
flag = 0;
break;
}
}
if(a[i] == 'A')
{
if(p == 0)
{
cont_a++;
}
else if(p == 1 && t == 0)
{
cont_b++;
}
else if(p == 1 && t == 1)
{
cont_c++;
}
}
}
if(flag == 1 && cont_b ==0)
{
printf("NO\n");
}
else if(flag == 1 && cont_a * cont_b == cont_c)
{
printf("YES\n");
}
else if(flag == 1 && cont_a * cont_b != cont_c)
{
printf("NO\n");
}
}
return 0;
}
if(a[i] == 'P')
{...}
else if(a[i] == 'T')
{...}
else if(a[i] == 'A')
{...}
else
{...}
#include<iostream>
#include<string.h>
using namespace std;
void judge(char *s);
int main()
{
int n;
cin >> n; //输入n行测试
getchar();
while (n-- > 0) //读取每行并作判断和输出
{
char str[100]; //保存读入的字符串
cin.getline(str, 100);
judge(str);
}
return 0;
}
/* 判断函数*/
void judge(char *s)
{
char *p = s;
int count[3] = { 0 }; // 记录_P_T_ 之间A的个数
int index = 0, flag = 1;
while (*p != '\0')
{
if (*p == 'A')
count[index] += 1;
else if (index == 0 && *p == 'P')//保证P只出现过一次
index++;
else if (index == 1 && *p == 'T') //保证T前面有过P
index++;
else
{
flag = -1; //出现其他、以及多余的字符,表示错误。
break;
}
p++;
}
if (flag==1 && count[1]!=0 && (index == 2) && (count[2] == count[0] * count[1])) // 保证PT各有一个,且A的数量满足规律
cout << "YES" << endl;
else
cout << "NO" << endl;
}
if(flag == 1 && cont_b ==0)
{
printf("NO\n");
}
else if(flag == 1 && cont_a * cont_b == cont_c && p && t)
{
printf("YES\n");
}
else if(flag == 1)
{
printf("NO\n");
}
整理一下,也就是如下的判断:
if(flag == 1)
{
if(cont_b > 0 && cont_a * cont_b == cont_c && p && t) printf("YES\n");
else printf("NO\n");
}
这道题的大致思路我理解了, 提交以后只有第一个测试点过不了, 但是我找不出自己的程序里到底哪里出错了。。。所以希望大佬指出我程序的疏漏之处 ……[/quote]