题目传送门
题目解释:
编码方式定义为: encodes “1211” as: “one of one, one of two, two of one”, or, more precisely: “111221”.
二次编码为: encoding of “111221” string is: “312211”.
保证不存在待编码串联系相同字符在 10 个以上的。
给定 k 次编码后的字符串,求原串的 pos 位的字符
解题思路:
用string模拟一下即可
ac代码:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
string nows,s;
int k,pos,i,j,p;
scanf("%d%d",&k,&pos);
cin>>nows;
for(i=k;i>0;i--)
{
s= "";
for(j=0;j<nows.size();j+=2)
{
int rep=nows[j]-'0';
s+=string(rep,nows[j+1]);
}
nows=s;
}
printf("%c\n",nows[pos]);
}
注意:
因为刚开始s中没有字符,所以不可以对s用下标访问,否则如果要输出更新后的nows,则不会输出结果
还有要注意这里用到了一个语句
string(int n, char c);
表示用n个字符c初始化
也可以用cstring头文件下的.assign()函数,这里大概讲一些用法
str.assign(int n,char c);
即把n个字符c赋值给str
所以该题也可以再定义一个string类型的字符串,用assign函数来实现之前string(int n,char c)的功能,但相比较而言还是ac代码中的语句要简单一些。
自由和山巅上的空气相似,对弱者而言都是吃不消的。(芥川龙之介)
与君共勉:D
欢迎讨论~非诚勿扰。邮箱:1308989543@qq.com