A1140.Look-and-say Sequence

题意

刚开始做这道题真是不好理解讲的什么鬼,直接举例子吧。

当D = 1时。

  • 第一项:1;
  • 第二项:因为第一项有1个1,所以为:11
  • 第三项:因为第二项有2个1,所以为:12
  • 第四项:因为第三项有1个1,1个2,所以为:11,21
  • 第五项:因为第四项有2个1(注意要求连续,不是3个),1个2,1个1,所以为:122111

思路分析

使用string s作为每一次变换后的字符串,初始为输入的D。遍历处理n-1次,不是n次(因为n=1时,不需处理),枚举字符串的位置j,再枚举k获得连续的相同的字符个数num,设临时字符串t += (s[j] + to_string(num)),处理一次后,则将s = t,继续下一次循环。

参考代码:

#include <bits/stdc++.h>
using namespace std;

int main(void){
	string s;int n;
	cin>>s>>n;
	for(int i = 1;i < n;i++) {			//循环处理字符串n-1次 
		string t;		//每一次更新后的字符串	
		int num;		//每一个s[j]出现的次数 
		for(int j = 0;j < s.length();j+=num){			//枚举字符串中所有不同的字符		 
			num = 1;
			for(int k = j+1;k < s.length();k++) {		//从j后开始枚举,找到相同的字符个数 
				if(s[k] == s[j]) num++;
				else break;
			}
			t += (s[j] + to_string(num));
		}
		s = t;
	}
	cout<<s;
	return 0;
} 
posted @ 2019-01-30 17:47  Western_Trail  阅读(154)  评论(0编辑  收藏  举报