回 帖 发 新 帖 刷新版面

主题:请教

打印如下图所示的数字“V”形,要求层数N,宽带M由键盘输入。(右图中N=8,宽带M=3)

777         777
  666       666
   555     555
    444   444
     333 333
      22222
       111
        0

要N,M自己输入的话,我的程序就不对了,可是不知道应该怎么做,谢谢各位高手,不知道能不能把整个程序写上来啊,谢谢1

回复列表 (共7个回复)

沙发

m是奇数吗?偶数怎么办?

板凳

var n,m,i, j : integer;
    s : string;

begin
  readln(n,m);
  for i:=n-1 downto 0 do
  begin
    s:='';
    for j:=1 to i*(m-1)+1 do s:=s+chr(48+i);
    for j:=m+1 to i*(m-1)+1-m do s[j]:=' ';
    for j:= 1 to (n-i-1)*(m div 2) do write(' ');
    writeln(s);
  end;
end.

3 楼

m,n不能太大。
n<=10(因为只有0~9十个数字),m太大一行打不下。

4 楼

应该用不到字符串吧
program aaa;
  var m,n,i,j:integer;
begin
  readln(n,m);
  for i:=n-1 downto 1 do begin
    for j:=0 to n-i-2 do write(' ');
    for j:=1 to m do write(i);
    for j:=1 to 2*(i-2)+1 do write(' ');
    for j:=1 to m-1 do write(i);
    writeln(i);
  end;
可能有点麻烦,但以测试过。
  for i:=1 to n do write(' ');
  writeln(0);
end.

5 楼

楼上的好像不太对吧……数字1那行,好像多了。
我一开始也是直接这么编的,但下面几行要缩进去,不好处理。所以我就用string了,这样每行宽度可以控制住,中间补空格就是了。
个人拙见,见笑~

6 楼

还有,这个“宽度”可以有多种理解。我又编了一个程序,是另一种理解:
var n,m,i, j : integer;

begin
  readln(n,m);
  for i:=n-1 downto 0 do
  begin
    for j:=1 to n-i-1 do write(' ');
    for j:=1 to i*2+1 do
      if (j<=m) or (j>i*2+1-m) then write(i) else write(' ');
    writeln;
  end;
end.
(昨晚太着急了,没好好想。现在这个应该是最优解了^o^)

7 楼

基本就是这样解了,比较普通的问题哦

我来回复

您尚未登录,请登录后再回复。点此登录或注册