题目描述
知识点
模拟题
实现
码前思考
- 需要自己动手模拟一下怎么进行操作的,模拟一遍就有思路了!!!
代码实现
#include "bits/stdc++.h"
using namespace std;
//为了以防万一,采用数字数组vector进行计数
vector<int> curN;
vector<int> nextN;
int d;
int n;
int main(){
scanf("%d %d",&d,&n);
curN.push_back(d);
for(int i=1;i<n;i++){
//每次进行一次统计
int size = curN.size();
for(int j=0;j<size;){
int pre = curN[j];
int cnt = 1;
j++;
while(j<size && curN[j]==pre){
cnt++;
j++;
}
nextN.push_back(pre);
nextN.push_back(cnt);
}
//然后进行重新的赋值
curN.clear();
curN = nextN;
nextN.clear();
}
//打印输出
for(int i=0;i<curN.size();i++){
printf("%d",curN[i]);
}
return 0;
}
码后反思
- 比起使用数组,这里使用
vector
会更好! - 柳神使用的
string
:#include <iostream> using namespace std; int main() { string s; int n, j; cin >> s >> n; for (int cnt = 1; cnt < n; cnt++) { string t; for (int i = 0; i < s.length(); i = j) { for (j = i; j < s.length() && s[j] == s[i]; j++); t += s[i] + to_string(j - i); } s = t; } cout << s; return 0; }
- 注意两个
vector
是可以直接赋值,使用的是值传递,而不是地址传递; string
类型之间可以做+
,表示拼接~~string
类型可以多次赋值,而字符数组只能初始时赋值~~