• 计蒜客 计数和数数 (模拟)


    题目链接

    题目描述
    “伯爵说”序列如下:1,11,21,1211,111221, ldots1,11,21,1211,111221,…。其1读作one 1或者11。11读作two 1s或者21。21读作one 2, one 1或者1211。

    输入格式
    多组输入,读到文件结束。每组输入给定一个整数 n(1 leq n leq 30)n(1≤n≤30)。

    输出格式
    输出第 nn 个序列。注意,整数序列以字符串的形式表示。

    样例输入
    6

    样例输出
    312211

    分析:
    读了两遍题,硬是没读懂题目是什么意思,这是语文有问题,~~~

    好了,先来说一下题目是什么额意思吧

    1.初始状态下我们有一个1
    2.基于1统计里面相邻的相同数字的个数,只有一个1,所以下一个串就应该是11,

    3.现在基于11来统计,里面有两个连续的1,所以下一个串就是21,

    4.基于21来统计,脸面有一个连续的2,一个连续的1,所以下一个串就是1211,

    5.基于1211来统计,依次有一个连续的1,一个连续的2,两个连续的1,所以下一个串就是111221,

    6.基于111221来统计,依次有三个连续的1,两个连续的2,一个连续的1,所以下一个串就是312211,

    ······

    这样挨个的统计下来,知道第n个就是所要求得。

    代码:

    #include<stdio.h>
    #include<iostream>
    using namespace std;
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            string ans="1";//初始的字符串
            for(int i=1; i<n; i++)//因为要求的是第n个,而第一个已经知道了,所以再循环n-1次即可
            {
                string temp="";//临时的变量,用来存当前计算出来的这个字符串
                int cnt=1;
                char ch_now=ans[0];
                for(int j=1; j<ans.length(); j++)//应该遍历的是上一个串
                {
                    if(ans[j]==ch_now)//和前一个相等,只将计数个数加
                        cnt++;
                    else
                    {
                        temp+=cnt+'0';//现将前一个字母的个数存下来
                        temp+=ch_now;//再讲这个字母存下来
                        cnt=1;//计数归1
                        ch_now=ans[j];//接着要找的字符为当前的字符
                    }
                }
                //将最后一个字母的情况也要记录下来
                temp+=cnt+'0';//猜测连续数组的个数应该不会超过十个,
                temp+=ch_now;
                ans=temp;
            }
            cout<<ans<<endl;
        }
        return 0;
    }
    
  • 相关阅读:
    Binary Tree Maximum Path Sum
    4Sum
    Candy
    Simplify Path
    Max Points on a Line
    ZigZag Conversion
    Two Sum
    Effective_STL 学习笔记(十二) 对STL线程安全性的期待现实一些
    Effective_STL 学习笔记(十一) 理解自定义分配器的正确用法
    Effective_STL 学习笔记(九) 在删除选项中仔细选择
  • 原文地址:https://www.cnblogs.com/cmmdc/p/8665811.html
Copyright © 2020-2023  润新知