题目描述
你有若干个彩球排成一列,你可以交换相邻的两个球。 如果出现含被交换球的3个或者以上的的同颜色彩球,那么这些彩球就会消失,右边的彩球会向左边靠拢填满空间。 现在给你一个操作的序列,请依次输出每次操作后的彩球序列。
输入
第一行是一个整数T(1≤T≤100),表示样例的个数。 每个样例包含两行,第一行是一个字符串,长度不超过30,只含大写字母'A'-'C',表示不同字母表示不同颜色的球。第二行开始是一个整数n(1≤n≤10),表示操作的个数,以后n个整数ai表示将ai和ai+1交换。输入数据保证是合法的操作。
输出
每个样例的每行输出一个操作后彩球的状况,每个样例最后输出一个空行。
样例输入
4 AABABBB 1 3 AAAABBBBC 2 4 4 AAAAAA 1 2 AABAABBB 2 3 1样例输出
Over AAABABBBC C Over BABBB A
解题思路:又是一道烧脑的模拟题,还是老老实实跟着题目走吧。
1. 先输入(注意这里用scanf("%s",balls),是从下标0开始输入的,没有与题目的ai保持一致,因为从下标1开始输入,后续不好处理balls数组)所以之后输入的 ai 要 -1。
2. 找到对应小球交换。
*3. 怎么判断是否要消除小球:就找交换后,连着的小球相同数是否大于等于3,交换后的小球,左边的就向左考虑,右边的向右考虑(这种没有同时向两边考虑的就要多处理一下,11、21行代码,要考虑交换的两个小球是否是一样的)
4. 定义好两个方向的 左右边界(left、right),如果为相同小球就 left1-- 或 right2 ++,如果最后 right-left >= 2,就说明有三个及以上的相同小球,要给它消掉。用一个中间数组,存下消去后剩下的小球,然后用 strcpy() 函数 复制给 balls数组。 最后判断输出。

文章讲述了如何通过模拟解决一个关于彩球交换导致同色球连在一起消去的问题,涉及输入处理、边界判断和消除操作的实现。解题思路包括检查相邻球的颜色变化,以及确定消除条件。
最低0.47元/天 解锁文章
1379

被折叠的 条评论
为什么被折叠?



