题目
小S今天给你出了一道找规律题,题目如下:
有如下的数列1,11,21,1211,111221,312211,……
小S问你这个数列的第N项是多少,而你一头雾水根本找不出规律。
聪明的小R悄悄地告诉你是这样的
1,
上一个数是一个1,写作11
上一个数是两个1,写作21
上一个数是一个2,一个1,写作1211
上一个数是一个1,一个2,两个1,写作111221,
…………
相信聪明的你一定可以解决这个问题。
一行一个正整数(注意数字可能会超过长整形,请注意用数组或者字符串存储)
题解
模拟就好。题目说的只是数字超过,不是长度超过,所以直接模拟就好
时间复杂度(n*len)
代码
var
s:ansistring;
n,i,j,k:longint;
x,a,x1,a1:array[0..1000000]of integer;
begin
readln(n);
s:='1';
while n>1 do
begin
fillchar(a,sizeof(a),0);
fillchar(x,sizeof(x),0);
k:=1;a[1]:=ord(s[1])-48;x[1]:=1;
for i:=2 to length(s) do
if s[i]=s[i-1] then
inc(x[k]) else
begin
inc(k);
a[k]:=ord(s[i])-48;x[k]:=1;
end;
s:='';
for i:=1 to k do
s:=s+chr(x[i]+48)+chr(a[i]+48);
dec(n);
end;
writeln(s);
end.