あなたはあなたの内側のループを変えることができます:
for j := 1 to i + 1 do
begin
if ( length(s) > n*2 ) then
begin
Break;
end;
str(i,c);
s:= s + c+',';
end;
まず、わかりやすくするために常にインデントすることをお勧めします。
for j := 1 to i + 1 do
begin
if ( length(s) > n*2 ) then
begin
Break;
end;
str(i,c);
s:= s + c+',';
end;
第二に、必要なのは複数のステートメントを1つのステートメントに変換することだけです。したがって、そこにしか入っていないので、begin
冗長です。直接breakを使用してください。end
break
for j := 1 to i + 1 do
begin
if ( length(s) > n*2 ) then Break;
str(i,c);
s:= s + c+',';
end;
c
次に、そのひどいロットを再計算していることに注意してください。
str(i,c);
suffix = c + ',';
for j := 1 to i + 1 do
begin
if ( length(s) > n*2 ) then Break;
s:= s + suffix;
end;
後藤のように不審に感じるので、私はブレークの使用にそれほど熱心ではありません。したがって、これをrepeat ... until
ブロックに変更することができます。
str(i,c);
suffix = c + ',';
j := 1;
repeat
s := s + suffix;
j := j + 1;
until (j > i+1) or (length (s) > n*2);
(それに注意してrepeat
ください。until
暗黙的begin
にend
入力する必要がないので、入力する必要はありません。)
ループが増加するだけであることがわかりにくくすることで、わかりやすくしたと主張するかもしれませんj
。この場合、私はあなたが好むものは何でも強く感じませんが、あなたが休憩をたくさん使っているなら、あなたにとって良いかどうかを考えてくださいwhile
。repeat
あなたの条件はlength (s) > n*2
私を困惑させます(そして他の誰もあなたのコードの彼らのバージョンにそれを入れていません)。どういうわけか短くしたいようです。本気ですか?私は違います。以下は、制限なしで取得する出力の表であり、次に出力の最初のn * 2項目、および文字列の最初のn * 2文字であるため、確認できます。何をするbreak
ように設計されたステートメントでしたか?
n: 1
output: 1,1
length: 2
n*2: 2
first n*2 numbers: 1,1
first n*2 characters: 1,
n: 2
output: 1,1,2,2,2
length: 5
n*2: 4
first n*2 numbers: 1,1,2,2
first n*2 characters: 1,1,
n: 3
output: 1,1,2,2,2,3,3,3,3
length: 9
n*2: 6
first n*2 numbers: 1,1,2,2,2,3
first n*2 characters: 1,1,2,
n: 4
output: 1,1,2,2,2,3,3,3,3,4,4,4,4,4
length: 14
n*2: 8
first n*2 numbers: 1,1,2,2,2,3,3,3
first n*2 characters: 1,1,2,2,
n: 5
output: 1,1,2,2,2,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5
length: 20
n*2: 10
first n*2 numbers: 1,1,2,2,2,3,3,3,3,4
first n*2 characters: 1,1,2,2,2,
n: 6
output: 1,1,2,2,2,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6
length: 27
n*2: 12
first n*2 numbers: 1,1,2,2,2,3,3,3,3,4,4,4
first n*2 characters: 1,1,2,2,2,3,