首页 新闻 会员 周边

做c语言题目遇到瓶颈,求大佬解决这个题目

-4
悬赏园豆:200 [待解决问题]

题目描述

可爱的红红是一个特殊的存在,卖萌切题无所不能,酷爱发QAQ。
男神队友决定整理一下聊天记录看看,红红给队友发了多少QAQ(可以是分散的QAQ)。
例如QAQJLZBBQ,输出2,聪明的你,能帮男神队友解决问题吗?

输入

输入一行长度为n的字符串(1<=n<=100000),并且字符串中字符全为大写字母。

输出

输出一个整数表示给出的字符串里子序列中"QAQ"的个数。子序列就是一些原字符串中不要求连续的字符组成的新字符串。

样例输入

QAQJLZBBQ

样例输出

2

提示

 

样例解释:第1 2 3个字符形成"QAQ" 第1 2 9个字符形成"QAQ";

 

小白白想成为大牛的主页 小白白想成为大牛 | 初学一级 | 园豆:2
提问于:2017-11-30 17:24
< >
分享
所有回答(4)
1

家庭作业要自己做才能小白白变成大牛。

花飘水流兮 | 园豆:13560 (专家六级) | 2017-11-30 17:58

已经写出来了一个,答案也正确,但是提交错误。想问问你们有没有别的做法,。。。

0

随便想的,你试一试可不可以,嵌套三个循环试一试,第一层循环找出以Q开头的,并且记录下Q的位置,第二层循环从上一层Q的位置开始循环,找出A的位置,第三层循环在从第二层中找到的A的位置,找Q的位置。

----------------------------------------------------------

上面这种思路是一般思路,其实这个过程中有一个规律:

就是QAQ的数量恰好是,每个A的左右Q的数量的乘积之和,比如:QAQJLAZABQ来说,一共有三个A,第一个A的左边Q的数量为1,右边的Q的数量为2,所以第一个A拥有的QAQ的数量就是2;第二个A,左边Q的数量的为2,右边Q的数量为1,所以第二个A的QAQ的数量就是2,第三个类似。因此得出QAQ的数量为2+2+2,答案就是6.只需要按照这个思路,把上面的程序实现一下就OK了:

1:得出字符串中所有Q的位置,保存到数组中

2:得出所有A的位置,保存到数组中。

3:循环第二个数组,得到A的位置,比对当前A的左右Q的数量的乘积,再将乘积保留下来。

4:最后得出答案。

HDWK | 园豆:152 (初学一级) | 2017-12-03 22:49
0

随便想的,你试一试可不可以,嵌套三个循环试一试,第一层循环找出以Q开头的,并且记录下Q的位置,第二层循环从上一层Q的位置开始循环,找出A的位置,第三层循环在从第二层中找到的A的位置,找Q的位置。

----------------------------------------------------------

上面这种思路是一般思路,其实这个过程中有一个规律:

就是QAQ的数量恰好是,每个A的左右Q的数量的乘积之和,比如:QAQJLAZABQ来说,一共有三个A,第一个A的左边Q的数量为1,右边的Q的数量为2,所以第一个A拥有的QAQ的数量就是2;第二个A,左边Q的数量的为2,右边Q的数量为1,所以第二个A的QAQ的数量就是2,第三个类似。因此得出QAQ的数量为2+2+2,答案就是6.只需要按照这个思路,把上面的程序实现一下就OK了:

1:得出字符串中所有Q的位置,保存到数组中

2:得出所有A的位置,保存到数组中。

3:循环第二个数组,得到A的位置,比对当前A的左右Q的数量的乘积,再将乘积保留下来。

4:最后得出答案。

fcyh | 园豆:568 (小虾三级) | 2017-12-04 10:45
0

西电的oj题目,同样遇到问题,不晓得到底哪里错了,郁闷了一晚上了

洛洛的壳壳 | 园豆:202 (菜鸟二级) | 2019-01-15 23:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册