1003 나 통과!(C 언어 판 + 주석 + 논리 문제)

'정 답' 은 자동 채점 시스템 이 내 놓 은 가장 반 가운 답변 이다.이 문 제 는 PAT 의 '정 답' 대 파 송 에 속 합 니 다. 읽 은 문자열 이 다음 조건 을 만족 시 키 면 시스템 은 '정 답' 을 출력 합 니 다. 그렇지 않 으 면 '정 답 오류' 를 출력 합 니 다.
'정 답' 을 얻 는 조건 은:
  • 문자열 에 만 있어 야 합 니 다.  P 、  A 、  T 이 세 가지 문 자 는 다른 문 자 를 포함 할 수 없습니다.

  • 임의의  xPATx  '정 답' 을 얻 을 수 있 는 문자열 입 니 다.  x  빈 문자열 이나 알파벳 으로 만  A  구 성 된 문자열;
    하면, 만약, 만약...  aPbTc  그렇다면  aPbATca  옳다  a 、  b 、  c  빈 문자열  A  구 성 된 문자열 입 니 다.
    이제 PAT 를 위해 어떤 문자열 이 '정 답' 을 얻 을 수 있 는 지 자동 심판 프로그램 을 써 주세요.
    입력 형식:
    각 테스트 입력 에는 테스트 용례 가 1 개 포함 되 어 있 습 니 다.첫 번 째 줄 은 정수 하 나 를 드 립 니 다. n (< 10) 검 측 이 필요 한 문자열 개수 입 니 다.다음 문자열 은 한 줄 을 차지 합 니 다. 문자열 의 길 이 는 100 을 넘 지 않 고 빈 칸 을 포함 하지 않 습 니 다.
    출력 형식:
    모든 문자열 의 검사 결과 가 한 줄 을 차지 합 니 다. 이 문자열 이 '정 답' 을 얻 을 수 있다 면 출력 합 니 다.  YES, 그렇지 않 으 면 출력  NO
    입력 예시:
    8
    PAT
    PAAT
    AAPATAA
    AAPAATAAAA
    xPATx
    PT
    Whatever
    APAAATAA
    

    출력 예시:
    YES
    YES
    YES
    YES
    NO
    NO
    NO
    NO

     
     중요 한 점:
  • 관계: P 앞 A 의 개수× PT 간 A 의 개수 = T 뒤에 A 의 개수
  • P 전 A 의 개 수 를 배열 a [0] 로 표시 합 니 다. a [1] PT 사이 의 A 개 수 를 매 핑 합 니 다. a [2] 맵 T 후 A 의 개수. 

  •  
    코드:
    #include
     
    int main(void) {
        int n, k, flag;
        char ch;
        
        scanf("%d", &n);
        getchar();    //    scanf    。
        while ( n-- ) {
        	int a[3] = {0};    //          。
        	k = 0, flag = 1;
            /* P、T    ,  P ,PT  、T  A   */
        	while ( ( ch = getchar() ) != '
    ' ) { // 。 if ( ch == 'A' ) a[k]++; // P A , a[0]. else if ( ch == 'P' && k == 0 ) k = 1; // PT A , a[1]. else if ( ch == 'T' && k == 1 ) k = 2; // T A , a[2]. else flag = 0; // PAT , flag 0. } /* PAT && T && PT A && P A PT A == T A*/ if ( flag && k == 2 && a[1] && a[0] * a[1] == a[2] ) printf("YES
    "); else printf("NO
    "); } return 0; }

    좋은 웹페이지 즐겨찾기