先说一下思路:1.首先,把输入转化为含有左括号“(”和右括号“)”的字符数组(具体过程就不说了呵呵)
2.第二步,从左往右找右括号,找到右括号后,向左找左括号,所找到的左括号计入sum,当找到没被mark的左括号时停止,并且把没被mark的左括号mark一下,输出sum.
注:输出一行的末尾要多出一个空格。
#include <iostream>
#include <cstring>
using namespace std;
int p_count;
int w_count;
int pocket[25];
char str[50];
int mark[50];
void search()
{
int q;
int sum;
while(w_count<strlen(str))
{
sum=0;
if(str[w_count]==')')
{
q=w_count;
while(q>0)
{
q--;
if(str[q]=='(')
{
sum++;
if(mark[q]==0)
{
mark[q]=1;
break;
}
}
}
cout<<sum<<' ';
}
w_count++;
}
}
int main()
{
int n;
int num;
int i,j,k;
cin>>n;
while(n--)
{
p_count=0;
w_count=0;
memset(pocket,0,sizeof(pocket));
memset(str,0,sizeof(str));
memset(mark,0,sizeof(mark));
cin>>num;
for(i=1;i<=num;i++)
{
cin>>pocket[i];
j=pocket[i]-pocket[i-1];
for(k=0;k<j;k++)
{
str[p_count++]='(';
}
str[p_count++]=')';
}
search();
cout<<endl;
}
return 0;
}