Aeon4120 2019-10-05 11:11 采纳率: 0%
浏览 501

PAT 乙级 1003 我要通过,卡在第 0 测试点了。麻烦帮看一下

图片说明

下面是我的代码。想不到什么测试用例了。

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
    int num = 0,i = 0,j = 0;
    int result[10]={0};
    int flag = 1;
    int length=0;
    scanf("%d",&num);

    for (i = 0; i < num; i++){
        char s[101];
        scanf("%s",s);
        int cnt_P=0,cnt_T=0; //P、T 的个数
        int pos_P=-1,pos_T=-1; //P、T的位置

        length = (int)strlen(s);

        for(j=0;j<length;j++){
            if(s[j]=='P'){
                pos_P = j;
                cnt_P++;
            }
            else if(s[j]=='T'){
                pos_T=j;
                cnt_T++;
            }
            else if(s[j]!='A'){
                flag=0;
                break;
            }

            if(flag && cnt_P == 1 && cnt_T == 1 ){
                int l_A = 0, c_A = 0, r_A = 0;  //左中右 A 的个数
                l_A = pos_P;
                c_A = pos_T - pos_P - 1;
                r_A = length - pos_T - 1;
                if (c_A > 0 && l_A * c_A == r_A) {
                    result[i]=1;
                }
            }
        }
    }
    for (i=0;i<num;i++) {
        if(result[i]==1){
            printf("YES\n");
        }
        else{
            printf("NO\n");
        }
    }
    return 0;
}

  • 写回答

3条回答 默认 最新

  • JonathanYan 2019-10-05 13:42
    关注

    试试AAPAATAA这个情况

    if (c_A > 0 && l_A * c_A == r_A)
    //改成
    if (c_A > 0 && l_A * (c_A-1) >= r_A)
    

    aPbTc==>aPbATca的意思是PT之间至少有一个A,且每多一个A右边就加一次串a。
    所以计算的时候中间A的数量要减一,并改成大于等于,因为还有串c。

    这个链接和你的代码基本一致,我之前也是想错了,你写的没问题。不过我也不清楚到底是哪里出了问题,你再试试吧。

    评论

报告相同问题?

悬赏问题

  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler