1. 程式人生 > >1084 外觀數列(20 分)

1084 外觀數列(20 分)

外觀數列是指具有以下特點的整數序列:

d, d1, d111, d113, d11231, d112213111, ...

它從不等於 1 的數字 d 開始,序列的第 n+1 項是對第 n 項的描述。比如第 2 項表示第 1 項有 1 個 d,所以就是 d1;第 2 項是 1 個 d(對應 d1)和 1 個 1(對應 11),所以第 3 項就是 d111。又比如第 4 項是 d113,其描述就是 1 個 d,2 個 1,1 個 3,所以下一項就是 d11231。當然這個定義對 d = 1 也成立。本題要求你推算任意給定數字 d 的外觀數列的第 N 項。

輸入格式:

輸入第一行給出 [0,9] 範圍內的一個整數 d

、以及一個正整數 N(≤ 40),用空格分隔。

輸出格式:

在一行中給出數字 d 的外觀數列的第 N 項。

輸入樣例:

1 8

輸出樣例:

1123123111
#include<iostream>
#include<string>
using namespace std;

int main(){
	//while(1){
		int d,n,size;
		scanf("%d%d",&d,&n);
		int n0=n;
		string s;
		s+=d+'0';		
		int j=0,count=1,i=0;
		while(n0>1){
			string ans;
			--n0;
			size=s.length();			
			j=0,i=0;
			while(i<size){
				count=1;
				while(i+1<size&&s[i]==s[i+1]){
					++count;
					++i;
				}
				ans+=s[i];
				ans+=count+'0';
				++i;
			}
			s=ans;
			//cout<<s<<endl;
		}

		if(n==1)
			cout<<d<<endl;
		else
			cout<<s<<endl;


	//}
}