POJ 1068解题报告

按题目要求,求圆括号的配对情况,使用模拟的方法求;

S (((()()())))
P-sequence     4 5 6666
W-sequence     1 1 1456

当输入 P-sequence时,模拟生成圆括号并存在一个结构体数组p[]中,结构体有记录符号的成员fuhao和标志符号flag,求匹配情况时,当遇到‘)’,向前检测,遇到‘(’计数nCount加一,若‘(’的标志符号为未访问,nCount++且break;此时nCount则为当前的‘)’的配对情况。该题属于简单模拟。

#include<iostream> using namespace std; struct parentcoding{ char fuhao; int flag; }p[100]; int main() { int m; int n; cin>>m; for(int f=0; f<m; f++) { int temp[30]; cin>>n; int j = 0; temp[0] = 0; for(int i=1; i<=n; i++) { cin>>temp[i]; for(int l=temp[i-1]; l<temp[i]; l++) { p[j].fuhao = '('; p[j].flag = 1; j++; } p[j].fuhao = ')'; p[j].flag = 1; j++; } for(int k=0; k<j; k++) { int nCount; if(p[k].fuhao == ')') { nCount = 0; for(int m = k - 1; m>=0; m--) {//往回查看 if(p[m].fuhao == '(') {//检测到没配对的( if(p[m].flag == 1) { nCount++; p[m].flag = 0; break; } nCount++; } } cout<<nCount<<" "; } } cout<<endl; } return 0; }

初次提交出现runtime error,后删除while(cin>>m){},(数组大小也由30变为100)使之最后一组测试数据不用按回车便可输出结果便可通过。

你可能感兴趣的:(POJ 1068解题报告)