PAT练习——“我要通过“

本文记录了一位作者在解决PAT题目时的经历,使用C语言通过遍历字符数组来计算字母出现次数,重点在于处理前、中、后A的条件。在实现过程中,作者遇到了指针使用的问题,最终解决了代码实现。此篇适合C语言初学者学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 这个题我做的时候也查了不少资料,看了很多前辈实现的代码。前辈们真的很牛,用了很少的代码就实现了这个题目要求,但我理解起来困难太大。

我的想法也是用字符数组存储输入的值,但是采用遍历寻找每个字母出现次数的方法。

 题目的条件前两个很好懂,就不过多赘述了,第三个条件其实要拿第二个条件作为基础条件,然后进行变化,最后得到的条件应该是前A的数目*中A的数目=后A的数目。

因为成不成立的条件都与各个字母出现的次数有关系,自然而然想到我可以把所有字母出现的次数算一遍,其中A要分为前A,中A和后A。乍一想好像很难实现,其实不然,只要遍历到P的时候退出,那么下一次再遍历的A就是中A的数目。这就要求我们记载每次遍历后退出的值是多少,由于本身是一个输出该字母出现次数的函数,因此要想再得到一个值,这里应该用引用或者是指针的方法。由于对指针不熟悉,这里踩了很多坑,包括但不仅限于:

一开始写的是*p++,这其实是对p的地址加1,那么p就指向别的地方去了,所以应该是(*p)++才正确

这段代码虽然长,但是思路比较简单,个人认为比较适合初学者看懂吧,如果有不理解的地方欢迎讨论

#include<stdio.h>
#include<windows.h>
int findA1(char a[],int *);
int findP(char a[],int *);
int findA2(char a[],int *);
int findT(char a[],int *);
int findA3(char a[],int *);
int main(){
    int n;
    int begin = 0;//这个是作为每次寻找的起始值,由于对函数内容不熟悉,一开始以为只能用指针传递,其实可以直接传形参,但这里还是保留原始答案
    int numA1 = 0,numA2 = 0,numA3 = 0;
    int numP = 0,numT =0;
    char pat[101];
    int i;
    for(i=0;i<101;i++){
        pat[i] = '0';
    }
    i = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

U2yyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值