主题:请教
zhouzhj5158
[专家分:0] 发布于 2005-04-13 14:06:00
打印如下图所示的数字“V”形,要求层数N,宽带M由键盘输入。(右图中N=8,宽带M=3)
777 777
666 666
555 555
444 444
333 333
22222
111
0
要N,M自己输入的话,我的程序就不对了,可是不知道应该怎么做,谢谢各位高手,不知道能不能把整个程序写上来啊,谢谢1
回复列表 (共7个回复)
沙发
huga3 [专家分:50] 发布于 2005-04-16 22:47:00
m是奇数吗?偶数怎么办?
板凳
huga3 [专家分:50] 发布于 2005-04-16 23:00:00
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 楼
huga3 [专家分:50] 发布于 2005-04-16 23:02:00
m,n不能太大。
n<=10(因为只有0~9十个数字),m太大一行打不下。
4 楼
smallboat [专家分:60] 发布于 2005-04-17 09:57:00
应该用不到字符串吧
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 楼
huga3 [专家分:50] 发布于 2005-04-17 20:57:00
楼上的好像不太对吧……数字1那行,好像多了。
我一开始也是直接这么编的,但下面几行要缩进去,不好处理。所以我就用string了,这样每行宽度可以控制住,中间补空格就是了。
个人拙见,见笑~
6 楼
huga3 [专家分:50] 发布于 2005-04-17 21:07:00
还有,这个“宽度”可以有多种理解。我又编了一个程序,是另一种理解:
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 楼
小小的草根 [专家分:0] 发布于 2005-04-19 07:51:00
基本就是这样解了,比较普通的问题哦
我来回复