括号匹配(一个已知括号组的完成)
用数组储存,目的是找到一个个完整的括号组,即括号组里面左括号,右括号相等。对每个括号组进行处理。
首先遍历一组,记录有多少个左括号。给每个数组元素一个编号,是数组下标加一。再遍历数组,每找到一个右括号,就往前找一个左括号。
找到一对后,用一个二维数组记录左右括号的位置。为了避免左括号重复被找,每找到一对,就改变编号成一个特殊数字。
最后根据输出的需要,需要将数组里的左括号编号从小到大输出,需要查找,记录。需要记录result_array的值,因为在排序时不断改变原本数组的值,所以在最后输出,需要一个初始的数组。
include <stdio.h>
int main()
{
char a[8]={'(','(','(',')','(',')',')',')'};
int remark_array[8]={0};
for(int i=0;i<8;i++) remark_array[i]=i+1;
int sum_left;
int result_array[4][2];
int p=0;
int sort_array[4]={0};
int right_now_location;
int left_location;
for(int j=0;j<8;j++)
{
if(a[j]==')')
{
right_now_location=j;
left_location=j-1;
while(remark_array[left_location]<0)
{
left_location--;
}
result_array[p][0]=left_location+1;
result_array[p][1]=right_now_location+1;
p++;
remark_array[left_location]=-1;
remark_array[right_now_location]=-1;
}
}
int mid_array[4][2];
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
mid_array[i][j]=result_array[i][j];
int min_num=0;
int min;
for(int i=0;i<p;i++)
{
int min=result_array[0][0];
min_num=0;
for(int j=1;j<p;j++)
{
if(result_array[j][0]<min)
{
min=result_array[j][0];
min_num=j;
}
}
sort_array[i]=min_num;
result_array[min_num][0]=100001;
}
for(int i=0;i<4;i++)
{
int n=sort_array[i];
printf("%d %d\n",mid_array[n][0],mid_array[n][1]);
}
}

浙公网安备 33010602011771号