列表

详情


NC21822. PPY的字符串

描述

Siry特别喜欢数学, 在他很小的时候他就对数字特别感兴趣, 他喜欢念数字。
具体念法是这样的: 给你一个数字, 依次念出每个数字有几个相邻(Siry会大声说出a个b, c个d...), 组合起来形成一个新的数字。
如:
2331的念法就是1个2,2个3,1个1, 形成的新数字就是122311。 再念一次就是1个1,2个2,1个3, 2个1, 形成的数字是11221321。
现在Siry大声的念出了第一次的数字x, Siry总共想要念n次, 你能快速的知道第n次的数字是多少吗?

输入描述

每行输入两个数字x,n。 
1≤ x≤ 109,1≤ n≤ 30

输出描述

输出一行,包括第n个数字的位数和这个数字。 位数和数字之间用空格隔开。

示例1

输入:

222 2

输出:

2 32

说明:

第一次念出的数字是222, 第二次就会念3个2, 形成的数字就是32, 位数是两位数。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang 3.9) 解法, 执行用时: 2ms, 内存消耗: 376K, 提交时间: 2018-12-30 15:06:55

#include<stdio.h>
#include<string.h>
int main ()
{ 
  
	int  m,k,i,j=0,t,f,n,s,x,c=0,d;
	char a[1000000],b[1000000];
	
	scanf("%s %d",&a,&n);
	c=strlen(a);
	for(i=1;i<n;i++){
		j=0;c=0;
		while(a[j]!='\0'){
			t=1;
			while(a[j]==a[j+1]){
				j++;t++;
			}
			b[c]=t+'0';c++;b[c]=a[j];c++;j++;
		}
		b[c]='\0';
		strcpy(a,b);
	}
	printf("%d %s",c,a);
	
	return 0;
} 

C++14(g++5.4) 解法, 执行用时: 5ms, 内存消耗: 488K, 提交时间: 2019-03-22 01:05:32

#include <bits/stdc++.h>
using namespace std;
int main()
{
	string x , s;
	int n , t = 1;
	cin >> x >> n;
	while(n > 1)
	{
		for(int i = 0 ; i < x.length() ; i++)
		{
			if(x[i] != x[i+1])
			{
				s += to_string(t);
				s += x[i];
				t = 1;	
			}
			else
			{
				t++;
			}
			
		}
		x = s;
		s.clear();
		n--;
	}
	cout << x.size() << " " << x << endl;
	return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 5ms, 内存消耗: 472K, 提交时间: 2020-02-27 13:31:59

#include<iostream>
#include<string>
using namespace std;
int main()
{
	int n;
	string x,s;
	cin>>x>>n;
	for(int i=1;i<n;i++)
	{
		for(int j=0;j<x.length();)
		{
			char count=49;
			while(x[j]==x[j+1])
			{
				count++;
				j++;
			}
			s+=count;
			s+=x[j];
			j++;
		}
		x=s;
		s="";
	}
	cout<<x.length()<<' '<<x;
	return 0;
 } 

Python3 解法, 执行用时: 48ms, 内存消耗: 4608K, 提交时间: 2022-04-10 14:47:23

a=input().split()
b=a[0]
c=int(a[1])-1


def shu(b):
    last=b[0]
    count1=0
    s=""
    for i in b:
        if i==last:
            count1+=1
        else:
            s+=str(count1)+last
            last=i
            count1=1
    s+=str(count1)+last
    return s
 
for i in range(c):
    b=shu(b)
print(len(b),b)
    

上一题