1084 外观数列

在这里插入图片描述
思路解析:
题目的意思很简单,就是让统计连续数字出现的个数,然后在个数前面加上这个数,怀疑陈姥姥就是故意刁难我们的……

比如122224333。
1连续出现了1次,所以是11;2连续出现了4次所以是24,加上前面算出来的11就是1124;4连续出现了1次,所以是41,同理加上前面的1124就是112441;3连续出现了3次,所以是33,结果就是11244133。

具体步骤:
有了思路,步骤就很简单啦,就是简单地统计个数。不过我想推荐一种相对简洁的代码。

这种思想是这样的:先用一个指针a指向当前匹配组的首元素,再用另一个指针b从指针a所指向的位置开始,顺移下去统计个数。b指针所指的末尾就是下一组匹配的开始。

我一开始想到的是s[i] == s[i+1]这种匹配模式,这无疑会带来多种问题和矛盾,首先得保证i+1不能越界,再其次出现次数count很难统计,会陷入多种细枝末节的小问题中,从而显得代码冗余。写出来给自己长长记性!希望各位没采坑……

示例代码:

#include<iostream>
#include<string>
using namespace std;
int main() {
	string a; 
	int n,k;
	cin >> a >> n;
	for (int i = 1; i < n; i++) {//执行n-1次 找第n项
		string res;
		for (int j = 0; j < a.length(); j = k) {//每一组匹配的首字母
			for (k = j; k < a.length() && a[k] == a[j]; k++);//每一组内连续相同字母的个数
			res += a[j] + to_string(k-j);
		}
		a = res;//新生成的字符串
	}
	cout << a;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值