如何对花括号和 open/closed 括号进行排序?
How can I sort curly- and open/closed brackets?
我的老师要我对随机数量的括号进行排序。
我试图自己解决这个问题...但是,我发现我的解决方案很糟糕,希望有人有更好的主意。
该字符串只包含这些字符:()[]{} ...
所以首先我检查了字符串的长度,然后让 case 语句计算每个字符以将数字保存在变量中。
之后我使用变量中的值来获得我想要的输出。
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.
示例:
Input: [{])]}(
Output: {}[]()
Input: [(}{[])}(]{)
Output:{}{}[][]()()
Input: [][}}](
Output: Error - brackets do not match.
正如我所说 - 我得到了想要的结果...但我认为它执行得不好。
但是我找不到更好的解决方案。
希望你能帮助我 - 谢谢!
变量是全局的,所以会被初始化为0,但除此之外,你可能需要将k1_open等设置为0。
您可以像这样改进代码:
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;
变成类似这样的东西:
if (k1_open = k1_closed) and
(k2_open = k2_closed) and
(k3_open = k3_closed) then
begin
for i := 1 to k1_open do
Write('()');
for i := 1 to k2_open do
Write('[]');
for i := 1 to k3_open do
Write('{}');
Writeln;
end
else
Writeln('Brackets do not match')
end.
改进后的版本也可以处理比每种括号三个更多的数字。
我的老师要我对随机数量的括号进行排序。 我试图自己解决这个问题...但是,我发现我的解决方案很糟糕,希望有人有更好的主意。
该字符串只包含这些字符:()[]{} ... 所以首先我检查了字符串的长度,然后让 case 语句计算每个字符以将数字保存在变量中。 之后我使用变量中的值来获得我想要的输出。
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.
示例:
Input: [{])]}(
Output: {}[]()
Input: [(}{[])}(]{)
Output:{}{}[][]()()
Input: [][}}](
Output: Error - brackets do not match.
正如我所说 - 我得到了想要的结果...但我认为它执行得不好。 但是我找不到更好的解决方案。
希望你能帮助我 - 谢谢!
变量是全局的,所以会被初始化为0,但除此之外,你可能需要将k1_open等设置为0。
您可以像这样改进代码:
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;
变成类似这样的东西:
if (k1_open = k1_closed) and
(k2_open = k2_closed) and
(k3_open = k3_closed) then
begin
for i := 1 to k1_open do
Write('()');
for i := 1 to k2_open do
Write('[]');
for i := 1 to k3_open do
Write('{}');
Writeln;
end
else
Writeln('Brackets do not match')
end.
改进后的版本也可以处理比每种括号三个更多的数字。