程序描述
方阵的主对角线之上称为“上三角”。
请你设计一个用于填充n阶方阵的上三角区域的程序。填充的规则是:使用1,2,3….的自然数列,从左上角开始,按照顺时针方向螺旋填充。
例如:当n=3时,输出:
1 2 3
6 4
5
当n=4时,输出:
1 2 3 4
9 10 5
8 6
7
当n=5时,输出:
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
程序运行时,要求用户输入整数n(3~20)
程序输出:方阵的上三角部分。
要求格式:每个数据宽度为4,右对齐。
程序实现
上三角和正螺旋的图形很相似,不同的是上三角输出的图形是从对角线斜过来的。
接下来,我们看看能不能从上三角图形中找些规律,有规律、把思路理清了,我们才能更容易用程序来实现所需功能。
首先我们会发现,输出的上三角和我们输入的行有关,如果输入5行,那就15个数,也就是输入N行,就输出N*(N+1)/2个数;其次和正螺旋一样都是依次递增的,从上三角图形我们可以看到,递增分为三个方向;左->右、右上->左下、下->上。
先贴下代码:
1 for(j=1;j<=N*(N+1)/2;low++,hi--) 2 { 3 for(i=low;i<hi-low;i++) 4 a[low][i]=j++; 5 for(i=low+1;i<hi-low;i++) 6 a[i][hi-i-1]=j++; 7 for(i=(hi-low)-2;i>low;i--) 8 a[i][low]=j++; 9 }
a表示的是输出的二维数组,N表示输入的行数,hi表示的是列的个数,初始化和N一样,N*(N+1)/2表示的就是上三角的个数,low表示的圈数,这三个for循环的意思就是上面说的三个方向,语句很简单主要是怎么利用参数来表示输出数组的下标。
话不言多,大家慢慢体会,如果有更好的实现方法,欢迎交流。。。
完整代码:
运行结果:
本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/3406992.html,如需转载请自行联系原作者