您的位置:首页 > 其它

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

2017-03-19 23:07 190 查看
题意:

描述

外观和说明序列定义如下。从任何数字字符串开始作为序列中的第一个元素。每个后续元素是通过“口头”描述前一个元素从前一个元素定义的。例如,字符串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;

}

回顾:还是那句话,做题之前先看数据范围大小有它本来的类型能不能解决如果不能就转变思维,不要在一棵树上吊死。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: