zoukankan      html  css  js  c++  java
  • PAT乙级.1003.我要通过

    答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。

    得到“答案正确”的条件是:

    1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;
    2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
    3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 A 组成的字符串。

    现在就请你为PAT写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。

    输入格式: 每个测试输入包含1个测试用例。第1行给出一个自然数n (<10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过100,且不包含空格。

    输出格式:每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出YES,否则输出NO。

    输入样例:
    8
    PAT
    PAAT
    AAPATAA
    AAPAATAAAA
    xPATx
    PT
    Whatever
    APAAATAA
    
    输出样例:
    YES
    YES
    YES
    YES
    NO
    NO
    NO
    NO
    题意分析:


    1)空字符串 不是 空格键 的意思。

    2)根据1知
    字符串中有且仅有‘P’‘A’‘T’三个字符。

    3)根据2,3和输入样例可知:
    输入必须包含一个P和一个T;

    P和T的位置关系不能颠倒;

    P之前A的个数 × P、T之间A的个数T之后的A的个数

         

    #include <stdio.h>  //此代码运行正确
    #include<string.h>
    char str[1000];
    int main()
    {
        int i, n;
        
        scanf_s("%d", &n);
        while (n--)
        {
            int num, temp, aunt, p, t;        //此处变量为局部变量,写在全局变量处会导致程序出错
            num = 0; temp = 0; aunt = 0;     //分别记录 p、t、a的个数
            p = 0; t = 0;                    //记录p和t的位置
            scanf_s("%s", str, 100);          //scanf_s为vs2017中用法,提交时将scanf_s改成scanf即可(将100删掉)
            for (i = 0; i <strlen(str); i++)
            {
                if (str[i] == 'P')
                {
                    p = i;                  //p所在位置 从0开始计数
                    num++;
                }
                 if (str[i] == 'T')
                {
                    t = i;                //t所在位置 从0开始计数
                    temp++;
                }
                 if (str[i] == 'A')
                {
                    aunt++;                  //A的总个数
    
                }
            }
            if ((num + temp + aunt)!= strlen(str) || num > 1 || temp >1 || p*(t - p - 1) != strlen(str) - t-1||t-p<=1)
            {
                printf("NO
    ");
            }
            else
            {
                printf("YES
    ");
            }
    
        }
    }


    下面这个程序因为局部变量定义位置出错导致程序出错。


    #include <stdio.h> //运行出错 #include<string.h> char str[1000]; int main() { int i, n; int num, temp, aunt, p, t; //此处变量为while函数的局部变量,在main函数中定义导致程序出错 num = 0; temp = 0; aunt = 0; // p = 0; t = 0; scanf_s("%d", &n); while (n--) { scanf_s("%s", str, 100); for (i = 0; i <strlen(str); i++) { if (str[i] == 'P') { p = i; //p所在位置从0开始计数 num++; } if (str[i] == 'T') { t = i; //t所在位置 从0开始计数 temp++; } if (str[i] == 'A') { aunt++; //A的总个数 } } if ((num + temp + aunt)!= strlen(str) || num > 1 || temp >1 || p*(t - p - 1) != strlen(str) - t-1||t-p<=1) { printf("NO "); } else { printf("YES "); } } }
  • 相关阅读:
    函数调用堆栈过程
    opencv相关的一些资料
    Debug模式下加快运行速度的一些方法
    目标检测的资料汇总
    Unity常见词汇查询表
    迷宫遍历板子
    Codeforces Round #739 (Div. 3)
    Codeforces Round #737 (Div. 2)
    快乐的一天从AC开始 | 20210810 | CF1554D
    快乐的一天从AC开始 | 20210809 | CF1554C
  • 原文地址:https://www.cnblogs.com/jhdcjh/p/6638432.html
Copyright © 2011-2022 走看看