NC21822. PPY的字符串
描述
输入描述
每行输入两个数字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)