ni我的打印螺旋矩阵的一个循环算法fd
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
目描述
打印如图所示的n阶螺旋数阵
输入n=,
如n=5,输出
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
要求打印的数阵的特点是很明显的,考虑用循环做。这是一道对初学循环者较难的题目,
需要严密的思维和良好的代码能力(将想法转化成程序代码的能力)。
以下以pascal代码为例,给出我的解法:
;
var
a:array[1..10,1..10] of integer;
n,i,j,m,x:integer;
begin
readln(n);
j:=0; x:=0;
while true do
{为了方便及时终止,判断循环终止的语句置于循环内部,你可以把它理解成 repeat-
until语句的另一种实现形式}
begin
for i:=1+x to n-x do
begin
inc(j);
a[1+x,i]:=j;
end;
if j=n*n then break; //判断到此是否完成
for i:=1+x+1 to n-x do
begin
inc(j);
a[i,n-x]:=j;
end;
if j=n*n then break;
m:=i;
for i:=n-x-1 downto 1+x do
begin
inc(j);
a[m,i]:=j;
end;
inc(x); {x控制循环终止的位置,你可以理解为已经输出了从外向内数输出了多少层}
for i:=m-1 downto 1+x do
begin
inc(j);
a[i,x]:=j;
end;
if j=n*n then break;
end;
for i:=1 to n do
begin
for j:=1 to n do write(a[i,j]:3);
writeln;
end;
end.
总结
这个算法还算比较好懂,其中的一个亮点是那个while语句,使得在循环中能随时判断是
否完成。希望这给初学者一些启示,循环要牢固掌握,用得灵活。