西南民族大学第十届校赛(同步赛)E(模拟)

链接:https://ac.nowcoder.com/acm/contest/322/E
来源:牛客网
 

题目描述

Siry特别喜欢数学, 在他很小的时候他就对数字特别感兴趣, 他喜欢念数字。

具体念法是这样的: 给你一个数字, 依次念出每个数字有几个相邻(Siry会大声说出a个b, c个d...), 组合起来形成一个新的数字。

如:

2331的念法就是1个2,2个3,1个1, 形成的新数字就是122311。 再念一次就是1个1,2个2,1个3, 2个1, 形成的数字是11221321。

现在Siry大声的念出了第一次的数字x, Siry总共想要念n次, 你能快速的知道第n次的数字是多少吗?

输入描述:

 

每行输入两个数字x,n。 

1≤ x≤ 109,1≤ n≤ 30

输出描述:

输出一行,包括第n个数字的位数和这个数字。 位数和数字之间用空格隔开。

示例1

输入

复制

222 2

输出

复制

2 32

说明

第一次念出的数字是222, 第二次就会念3个2, 形成的数字就是32, 位数是两位数。

思路:

模拟题,照着说的做。

to_string 函数的应用表示 int 转字符串

循环这个字符串,t  标记相同数字的个数 , 当这个数和下一个数不相同的时候,重新定义一个 s += t 和此时的数字。

如果 n 次没有结束, 就继续循环,ra让循环的字符串等于s.

代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
	string x , s;
	int n , t = 1;
	cin >> x >> n;
	while(n > 1)
	{
		for(int i = 0 ; i < x.length() ; i++)
		{
			if(x[i] != x[i+1])
			{
				s += to_string(t);
				s += x[i];
				t = 1;	
			}
			else
			{
				t++;
			}
			
		}
		x = s;
		s.clear();
		n--;
	}
	cout << x.size() << " " << x << endl;
	return 0;
 } 

猜你喜欢

转载自blog.csdn.net/qq_41593380/article/details/86177784
今日推荐