你可以改變你的內循環:
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;
其次,你只需要begin
和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,