各位大佬請幫幫我!!!

原題https://pintia.cn/problem-sets/994805260223102976/problems/994805323154440192
我的代碼
#include <iostream>
using namespace std;
int main(void)
{
int n;
cin>>n; //-----------------------------------輸入n
for(int i=0;i<n;i++)
{
cin.sync();
cin.clear(); //-----------------------清空快取區
int a=0,b=0,c=0,*flag,cp=0,ct=0; //---------------按題目中的第三條規則,用a,b,c三個int存盤不同位置A個數,cp,cp用來記錄T、P個數
flag=&a; //---------------------------初始化flag指標指向a(從a開始計數
char t; //---------------------------臨時變數
while((t=cin.get())!=EOF)
{
if(t!='A')
{
if(t=='P'&&(!cp))
{
flag=&b;
cp++;
} //--------------當讀取到P時,說明a串已讀完,此時將指標flag指向b,之后開始讀b串中A個數
else
{
if(t=='T'&&(!ct)&&cp)
{
flag=&c;
ct++;
} //----------當讀完P后再讀取到T時,說明b串已讀完,此時將指標flag指向c,之后開始讀c串中A個數
else
{
if(t=='\n')
if(c==b*a&&b>0&&cp==ct&&cp==1) //若是換行符且滿足條件則輸出YES
cout<<"YES"<<endl;
else
cout<<"NO"<<endl; //若不滿足條件則輸出NO
else
cout<<"NO"<<endl; //若不是換行符則說明輸入了怪東西,直接NO
break;
}
}
}
else
(*flag)++; //-----------------------若讀取到的是A,則將flag指標所指的int++,代表a,b,c各串所含有A個數
}
}
return 0;
}
0分,全部答案錯誤,但是不知道哪出問題了,求救啊啊啊啊啊啊~
uj5u.com熱心網友回復:
自頂
uj5u.com熱心網友回復:
規則理解錯了,自然全錯了~~~PTA,鬧心……
#include<stdio.h>
#include<string.h>
int main(){
int n,i,j;
int cntp=0,cntt=0,cnta=0,flag=1;
char *p1,*p2;
scanf("%d",&n);
char s[10][100];
for(i=0;i<n;++i)
scanf("%s",s[i]);
for(i=0;i<n;++i)
{
flag = 1;
cntp = cnta = cntt = 0;
//數一下P,A,T的個數,如果有其它字符則NO;[規則1]
for(j=0;s[i][j]!='\0';j++)
{
if(s[i][j]=='P') cntp++;
else if(s[i][j]=='A') cnta++;
else if(s[i][j]=='T') cntt++;
else {flag=2; break;}
}
//只能有1個P和T,最少有1個A;[規則2]
if(flag==1&&cntp==1&&cntt==1&&cnta!=0)
{
p1=strchr(s[i],'P');
p2=strchr(s[i],'T');
//aPbATca 指的是:(P前面A的個數) * (P T之間A的個數) == T后面A的個數;[規則3]
if((p1-s[i])*(p2-p1-1)==strlen(p2)-1)
flag=0;
}
if(flag==0) puts("YES");
else puts("NO");
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/115972.html
標籤:新手樂園
