《ACM程序设计》-Problem-Y-输出描述字符串

题意:

描述

外观和说明序列定义如下。从任何数字字符串开始作为序列中的第一个元素。每个后续元素是通过“口头”描述前一个元素从前一个元素定义的。例如,字符串122344111可以被描述为“一个1,两个2,一个3,两个4,三个1”。因此,在序列中的122344111之后的元素是1122132431.类似地,字符串101出现在1111111111之后。注意,通常不可能唯一地标识特定元素的前一元素。例如,112213243 1的字符串也产生1122132431作为下一个元素。

输入

输入包括多个案例。第一行给出了要跟踪的病例数。每个案例由一行最多1000位数字组成。

输出

对于每个测试用例,请打印给定字符串后面的字符串。

样品输入




122344111 
1111111111 
12345

示例输出



1122132431 
101 
1112131415

解题思路:因为最多有1000位数字,已经超出了int 范围,高精度计算不会,所以转变思路用字符串来做,但是我做的感觉还是太麻烦,检索完了以后把相应的值放到了两个数组里面一个放被描述的值,一个是那个值的个数,有人有检索完以后直接输出,这样比我的确实简洁了不少,感觉以后思维这方面还是要多锻炼多思考。

代码如下:

#include <bits/stdc++.h>
using namespace std;
int main()
{   int n,j,i,b[10002],r,m;
    string h,x="\n";
    char a[10002];
    cin>>n;
    getline(cin,x);
    for(m=0;m<n;m++)
    {   j=0;
        getline(cin,h);
        a[j]=h[0];
        b[j]++;
        i=1;
        r=h.size();
        while(i<r)
        {
            if(h[i]==a[j])
                b[j]++;
            else
            {
                a[++j]=h[i];


                b[j]++;
            }
         i++;
        }
      for(int q=0;q<=j;q++)
        cout<<b[q]<<a[q];
      cout<<endl;
      for(int q=0;q<10002;q++)
        b[q]=0;
  }
 return 0;
}


回顾:还是那句话,做题之前先看数据范围大小有它本来的类型能不能解决如果不能就转变思维,不要在一棵树上吊死。









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值