括号编码

huanghai15973220000 2008-04-27 01:05:48
括号编码
S = s1 s2...s2n 是一个符合格式的括号的字符串,S能按下面两种方式编码:
P编码:编码是一个整数序列P = p1 p2...pn,pi是第i个右括号之前的左括号的数目。
W编码:编码是一个整数序列W= p1 p2...pn,wi是第i个右括号的编码值,它等于这个右括号到与之匹配的左括号之间的右括号的数目(包括它自己)。
比如:
S ( ( ( ( ) ( ) ( ) ) ) )
P 4 5 6 6 6 6
W 1 1 1 4 5 6
请写一个程序将P序列转换成W序列。
输入:第一行是一个整数K,表示有多少个测试用例,以后每两行一个测试用例。每个测试用例第一行为一个整数n(1 <= n <= 20),表示P序列长度,每个测试用例第二行n个非负整数,每个整数之间有一个空格分隔。
输出:每行输出一个测试用例的结果。每行包括n个整数,每个整数之间用一个空格分隔。
Sample Input:
2
6
4 5 6 6 6 6
9
4 6 6 6 6 8 9 9 9
Sample Output:
1 1 1 4 5 6
1 1 2 4 5 1 1 3 9
...全文
152 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
#include <iostream>包不可以打开,还有很多错误,并且c++没学看不懂
yeknight 2008-04-27
  • 打赏
  • 举报
回复
昨天刚做,我是把括号存起来再来算的
#include<iostream>
using namespace std;
int main()
{
int test;
int n,m;
int a[25],i,b[25],j,k;
int left,right;
char ch[50];
cin>>test;
while(test--)
{
cin>>n;
m=n;
a[0]=0;
k=0;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n;i++)
{
for(j=0;j<a[i]-a[i-1];j++)
ch[k++]='(';
ch[k++]=')';
}
for(i=k-1;i>=0;i--)
{
if(ch[i]==')')
{
right=left=0;
for(j=i;j>=0;j--)
{

if(ch[j]==')')
right++;
else if(ch[j]=='(')
left++;
if(right==left)
{
b[n--]=left;
break;
}
}
}
}
for(i=1;i<=m;i++)
cout<<b[i]<<" ";
cout<<endl;
}
return 0;
}

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧