zoukankan      html  css  js  c++  java
  • 1140 Look-and-say Sequence (20 分)

    1. 题目

    Look-and-say sequence is a sequence of integers as the following:

    D, D1, D111, D113, D11231, D112213111, ...
    

    where D is in [0, 9] except 1. The (n+1)st number is a kind of description of the nth number. For example, the 2nd number means that there is one D in the 1st number, and hence it is D1; the 2nd number consists of one D (corresponding to D1) and one 1 (corresponding to 11), therefore the 3rd number is D111; or since the 4th number is D113, it consists of one D, two 1's, and one 3, so the next number must be D11231. This definition works for D = 1 as well. Now you are supposed to calculate the Nth number in a look-and-say sequence of a given digit D.

    Input Specification:

    Each input file contains one test case, which gives D (in [0, 9]) and a positive integer N (≤ 40), separated by a space.

    Output Specification:

    Print in a line the Nth number in a look-and-say sequence of D.

    Sample Input:

    1 8
    

    Sample Output:

    1123123111
    

    2. 题意

    外观数列,如下案例:

    D, D1, D111, D113, D11231...

    其中D是一个[0, 9]范围内不等于1的整数;

    数列第2项:表示第1项有1个D,所以为D1

    数列第3项:表示第2项中有1个1和1个D,所以为D111

    数列第4项:表示第3项中有1个D和3个1,所以为D113

    数列第5项:表示第4项中有1个D,2个1和1个3,所以为D11231

    ...

    数列第n项:...

    题目要求求解给定数字D的外观数列的第n项。

    3. 思路

    外观数列变换: 根据题意,每次新的外观数列是对上一次外观数列的一次变换。

    变化规则:即对上一个外观数列字符串中的连续字符进行计数,并将字符和字符个数合并成新的字符串即为新的外观数列。

    4. 代码

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    string res;
    
    void lookAndSay()
    {
    	char ch = res[0];
    	string temp = "";
    	int cnt = 1;
    	for (int i = 1; i < res.length(); ++i)
    	{
    		if (res[i] == ch)
    		{
    			// 计数连续相等字符的个数 
    			cnt++;
    		} else
    		{
    			// 当出现字符不一致时,计数结束,并将字符和个数加入结果temp字符串 
    			temp += ch + to_string(cnt);
    			ch = res[i];
    			cnt = 1;
    		}
    	}
    	// 字符串最后一位没有进行计数操作,额外进行一次操作 
    	temp += ch + to_string(cnt);
    	// 将最新外观数列temp赋值给res 
    	res = temp;
    }
    
    int main()
    {
    	int n;
    	cin >> res >> n;
    	// 外观数列的第一项即为本身,不需要进行额外计算 
    	n -= 1;	
    	while (n--)
    	{
    		lookAndSay();
    	}
    	cout << res << endl;
    	return 0;
    }
     
    
  • 相关阅读:
    ubuntu16.04安装ibus中文输入法
    apt --fix-broken install
    fuelgauge
    make flash FLASH_CONFIG=jtag_full
    使用android ndk编译boost动态库
    RK3288的gpio设置
    RK3288 GPIO 输出问题
    HDU-2586-裸LCA入门-tarjan离线
    uva-11324-SCC+dp
    HDU-2767-tarjan/Kosaraju求scc
  • 原文地址:https://www.cnblogs.com/vanishzeng/p/15484356.html
Copyright © 2011-2022 走看看