回 帖 发 新 帖 刷新版面

主题:tju1001

排版题.输出排列成菱形的字母
Time Limit:1s Memory Limit:1000k
Total Submit:14651 Accepted:4031
下载样例程序(PE)




--------------------------------------------------------------------------------

Problem
输入N值,编程输出如下图形。



Input
一个整数N(1<=N<=7)。



Output
排列成菱形的大写字符,首字符为Z,以后依次为Y,X...



Sample Input
3
Sample Output
    Z  Y   XW       V  U   T    S

以下是我的程序:

Program TJU1001;
VAR
  pos1,pos2,i,m,n,lne:byte;
  ch:array[1..24]of char;
BEGIN
  readln(n);
  for i:=1 to (4*n-4) do
    BEGIN
      ch[i]:='Z';
      dec(i);
    END;
  writeln(ch[1]:11);
  for lne:=2 to n do
    BEGIN
      pos1:=12-lne;
      pos2:=2*lne-3;
      write(ch[2*lne-2]:pos1);
      write(ch[2*lne-1]:pos2);
    END;
  for lne:=(n+1) to (2*n-2) do
    BEGIN
      pos1:=lne-2;
      pos2:=25-2*lne;
      write(ch[2*lne-2]:pos1);
      write(ch[2*lne-1]:pos2);
    END;
  writeln(ch[2*n-2]:11);
END.

可是我总是超时,规定1秒内完成,而我总是2秒才完成。这是什么原因?我该如何改进程序?

帮帮忙,多谢!

回复列表 (共1个回复)

沙发

program tju1001;
var
  n,i:byte;
  c:char;
procedure printline(x:byte);
  var
    i:byte;
  begin
    for i:=1 to (n-x)*2 do write(' ');
    if x>1 then begin
      write(c);dec(c);
      for i:=1 to x*4-5 do write(' ');
    end;
    writeln(c);dec(c);
  end;
begin
  read(n);
  c:='Z';
  for i:=1 to n do printline(i);
  for i:=n-1 downto 1 do printline(i);
end.

我来回复

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