Pascal 如何对花括号和开/闭括号进行排序?
我的老师想让我对任意数量的括号进行排序。 我试图自己解决这个问题。。。然而,我发现我的解决方案不好,希望有人有更好的想法 字符串仅包含以下字符:()[]{}。。。 因此,首先我检查了字符串的长度,然后让case语句对每个字符进行计数,以将数字保存在变量中。 之后,我使用变量中的值来获得想要的输出Pascal 如何对花括号和开/闭括号进行排序?,pascal,Pascal,我的老师想让我对任意数量的括号进行排序。 我试图自己解决这个问题。。。然而,我发现我的解决方案不好,希望有人有更好的想法 字符串仅包含以下字符:()[]{}。。。 因此,首先我检查了字符串的长度,然后让case语句对每个字符进行计数,以将数字保存在变量中。 之后,我使用变量中的值来获得想要的输出 program counter; uses SysUtils, crt; var character: String; k1_open,k2_open,k3_open,k1_closed,k
program counter;
uses SysUtils, crt;
var
character: String;
k1_open,k2_open,k3_open,k1_closed,k2_closed,k3_closed : Integer;
i : Integer;
begin
writeln('sort brackets (1. Version)');
write('Input: ');readln(character);
for i := 1 to length(character) do
begin
case character[i] of
'(' : k1_open := k1_open + 1;
'[' : k2_open := k2_open + 1;
'{' : k3_open := k3_open + 1;
')' : k1_closed := k1_closed + 1;
']' : k2_closed := k2_closed + 1;
'}' : k3_closed := k3_closed + 1;
end;
end;
if (k1_open = 1) and (k1_closed = 1) then begin
write('()');
end else if (k1_open = 2) and (k1_closed = 2) then begin
write('()()');
end else if (k1_open = 3) and (k1_closed = 3) then begin
write('()()()');
end;
if (k2_open = 1) and (k2_closed = 1) then begin
write('[]');
end else if (k2_open = 2) and (k2_closed = 2) then begin
write('[][]');
end else if (k2_open = 3) and (k2_closed = 3) then begin
write('[][][]');
end;
if (k3_open = 1) and (k3_closed = 1) then begin
write('{}');
end else if (k3_open = 2) and (k3_closed = 2) then begin
write('{}{}');
end else if (k3_open = 3) and (k3_closed = 3) then begin
write('{}{}{}');
end;
end.
示例:
正如我所说的-我有想要的结果。。。但我认为它执行得很糟糕。 但我找不到更好的解决办法
我希望你能帮助我-谢谢 变量是全局变量,因此它们将被初始化为0,否则,您可能需要将k1_open等设置为0 您可以这样改进代码:
如果(k1_打开=1)和(k1_关闭=1),则开始
写(“()”);
如果(k1_打开=2)和(k1_关闭=2),则结束else,然后开始
写(“()”);
如果(k1_打开=3)和(k1_关闭=3),则结束else,然后开始
写(“()”);
结束;
如果(k2_打开=1)和(k2_关闭=1),则开始
写入(“[]”);
如果(k2_打开=2)和(k2_关闭=2),则结束else,然后开始
写入(“[]”);
如果(k2_打开=3)和(k2_关闭=3),则结束else,然后开始
写入(“[]”);
结束;
如果(k3_打开=1)和(k3_关闭=1),则开始
写({}');
如果(k3_打开=2)和(k3_关闭=2),则结束else,然后开始
写('{}{}');
如果(k3_打开=3)和(k3_关闭=3),则结束else,然后开始
写('{}{}}');
结束;
变成类似于:
if(k1_打开=k1_关闭)和
(k2_打开=k2_关闭)和
(k3_打开=k3_关闭)然后
开始
对于i:=1至k1_开放do
写(“()”);
对于i:=1至k2_开放do
写入(“[]”);
对于i:=1至k3_开放do
写({}');
书面语;
结束
其他的
Writeln('括号不匹配')
结束。
改进后的版本也可以处理每种括号中大于三个的数字。这些变量是全局变量,因此它们将被初始化为0,否则,您可能需要将k1_open等设置为0 您可以这样改进代码:
如果(k1_打开=1)和(k1_关闭=1),则开始
写(“()”);
如果(k1_打开=2)和(k1_关闭=2),则结束else,然后开始
写(“()”);
如果(k1_打开=3)和(k1_关闭=3),则结束else,然后开始
写(“()”);
结束;
如果(k2_打开=1)和(k2_关闭=1),则开始
写入(“[]”);
如果(k2_打开=2)和(k2_关闭=2),则结束else,然后开始
写入(“[]”);
如果(k2_打开=3)和(k2_关闭=3),则结束else,然后开始
写入(“[]”);
结束;
如果(k3_打开=1)和(k3_关闭=1),则开始
写({}');
如果(k3_打开=2)和(k3_关闭=2),则结束else,然后开始
写('{}{}');
如果(k3_打开=3)和(k3_关闭=3),则结束else,然后开始
写('{}{}}');
结束;
变成类似于:
if(k1_打开=k1_关闭)和
(k2_打开=k2_关闭)和
(k3_打开=k3_关闭)然后
开始
对于i:=1至k1_开放do
写(“()”);
对于i:=1至k2_开放do
写入(“[]”);
对于i:=1至k3_开放do
写({}');
书面语;
结束
其他的
Writeln('括号不匹配')
结束。
改进后的版本也可以处理大于每种括号中三个的数字。首先,将所有
k
-变量设置为零。不要测试打开
/关闭
计数为1,2,3等,而是测试是否相等。然后在循环中使用count变量打印括号数。首先,将所有k
-变量设置为零。不要测试打开
/关闭
计数为1,2,3等,而是测试是否相等。然后在循环中使用count变量打印括号数。
Input: [{])]}(
Output: {}[]()
Input: [(}{[])}(]{)
Output:{}{}[][]()()
Input: [][}}](
Output: Error - brackets do not match.