P1928 外星密码题解

初看这题时,感觉就是一个简简单单的递归,便有了以下代码:

#include <bits/stdc++.h>
using namespace std;
string re(){
    string s="",s1="";
    char c;
    int n;
    while(cin>>c){
        if(c=='['){
            cin>>n;
            s1=re();
            while(n--)s+=s1;
        }
        else if(c==']')return s;
        else s+=c;
    }
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cout<<re();
    return 0;
}
样例过了,自信提交,结果0分。。好吧,我们来看看数据点提示,RE。这时应该就要注意是数组越界还是有状态没考虑,自己造几组数据可知,若没有括号,则程序没有输出,产生死循环,于是略微修改,也是总算过了。。
正确代码:
#include <bits/stdc++.h>
using namespace std;
string re(){
    string s="",s1="";
    char c;
    int n;
    while(cin>>c){
        if(c=='['){
            cin>>n;
            s1=re();
            while(n--)s+=s1;
        }
        else if(c==']')return s;
        else s+=c;
    }
  return s;
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cout<<re();
    return 0;
}
总结:在打题时应先思考完所有的情况再下手,应该自己多造几个数据,手算一下边界条件。
posted @ 2024-09-06 16:34  谦谦2020  阅读(33)  评论(0编辑  收藏  举报