z3475 的博客

题解 P1928 【外星密码】

直说思路,利用C++里的函数递归解决问题,自行重写了读入/读出

如 AfF[4RA[2A]]

可以当成

AfF+[4RA+[2A]]

递归处理[2A]

AfF+[4RAAA]

递归处理[4RAAA]

AfFRAAARAAARAAA

上代码

#include<bits/stdc++.h>
#define ri register int
using namespace std;
string a;
int post=0;
char getchar2(){return a[post++];}   //自行定义getchar 
int gi(){                            //自定义读入整数,注意读完post(位置)减一确保在数字后一位 
    int u=0;char p=getchar2();
    while (!(p>='0'&&p<='9')) p=getchar2();
    while ((p>='0'&&p<='9')) u=u*10+p-'0',p=getchar2();
    post--;
    return u;
}
string po(int u){//递归函数
    char p=getchar2();
    string yy;
    while (p!=10){
        if (p=='['){
            int l=gi();
            yy.append(po(l));
        }else
        if (p==']'){
            string o;
            for (int i=1;i<=u;i++)
                o.append(yy);
            return o;
        }else
        yy.push_back(p);
        p=getchar2();
    }
    return yy;
}
int main()
{
    cin >> a;           //开局读入一行 
    a.push_back(10);    //加入回车符表结束 
    cout << po(1);      //调用递归函数 
}

2017-11-10 21:49:24 in 题解