Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 帕斯卡,生成一串数字_Loops_Pascal - Fatal编程技术网

Loops 帕斯卡,生成一串数字

Loops 帕斯卡,生成一串数字,loops,pascal,Loops,Pascal,我在pascal中遇到了一个问题:在下一个序列中生成前n个数字:1,1,2,2,3,3,3,4,4,4,4,4,。。。我为这些写了一个代码,但问题是它不能按我想要的方式工作 var s,c: string; n,i,j: integer; begin s:=''; readln(n); begin for i := 1 to n do begin if ( length(s)/2 -1 >= n) then begin Break; end

我在pascal中遇到了一个问题:在下一个序列中生成前n个数字:1,1,2,2,3,3,3,4,4,4,4,4,。。。我为这些写了一个代码,但问题是它不能按我想要的方式工作

var
s,c: string;
n,i,j: integer;
begin
 s:='';
 readln(n);
 begin
  for i := 1 to n do
   begin
    if ( length(s)/2 -1 >= n) then
    begin
     Break;
    end;
    for j := 1 to i + 1 do
    begin
     str(i,c);
     s:= s + c+',';
    end;

 end;
end; 

我已经解决了我的问题,这是正确的代码,如果你能改进它,那就太好了

var
s,c: string;
n,i,j: integer;
begin
 s:='';
 readln(n);
 begin
  for i := 1 to n do
   begin

    for j := 1 to i + 1 do
    begin
     if ( length(s) > n*2  ) then
    begin
     Break;
    end;
     str(i,c);
     s:= s + c+',';
    end;

   end;
  end;
 Delete(s,length(s)-2,length(s));
 write(s);
 readln;
 end.

我会改变外循环的工作方式,这样
I
会指示您所处的位置,并引入第二个数字
element
,表示当前元素。然后,只要内部循环已经运行,就增加
元素

s:='';
readln(n);
element:=1;
begin
  for i := 1 to n do
  begin
    for j := 1 to i + 1 do
    begin
     str(element,c);
     s:= s + c+',';
    end;
    element:=element+1;
  end;
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;
首先,为了清晰起见,我建议你总是缩进,所以

    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
,所以它们是多余的-直接使用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;
我不太喜欢使用break,因为它让人觉得有点像goto, 所以也许你可以把它改成一个
重复。。。直到
block:

    str(i,c);
    suffix = c + ',';
    j := 1;
    repeat 
      s := s + suffix;
      j := j + 1;
    until (j > i+1) or (length (s) > n*2);
(请注意,
重复
直到
带有一个隐式的
开始
结束
,因此您不需要键入它们。)
现在你可能会争辩说,我降低了清晰度,因为我让循环只是增加了
j
。 在这种情况下,无论你喜欢什么,我都不觉得很强烈,但是如果你使用了很多的中断,那么考虑<代码> < <代码> >还是<代码>重复< /代码>对你来说更好。

你关于
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,
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,