西南民族大学第十届校赛(同步赛)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;
}