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;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值