编写算法:根据参数n打印具有下面规律的图形,当n=4时,图形如下:
问题分析
思路一:
- 容易发现图形中数据排列的规律
- 从1—最大数,通过循环,直接输出 printf是按照从左至右、从上至下的顺序;
若想直接输出,只有找出公式,循环计算得到
序列:1-\n-5-2-\n-8-6-3-\n-10-9-7-4. (\n表换行)
思路二:
先用一个数组按此顺序存储数据,再正常输出;
为数组赋值,也要用循环 用斜行、列描述循环方向。 斜行i取值(1~n) 列j取值(1~n+1-i)
斜[1,1]—a[1,1] 斜[1,2]—a[2,2] 斜[1,3]—a[3,3] 斜[1,4]—a[4,4]
斜[2,1]—a[2,1] 斜[2,2]—a[3,2] 斜[2,3]—a[4,3]
斜[3,1]—a[3,1] 斜[3,2]—a[4,2]
斜[4,1]—a[4,1]
列号相同; 斜行a[i,j]->正常a[r,c] c=j,r=j+i-1 行号(显然行号与列号有关) i to n
- [ ]第1斜行,对应行号1—n,行号与列号j同;
- 第2斜行,对应行号2—n,行号比列号j大1;
- 第3斜行,对应行号3—n,行号比列号j大2;
伪代码描述
main( )
{
int i,j,a[100][100],n,k;
input(n);
k=1;
for(i=1;i<=n;i=i+1)
for( j=1;j<=n+1-i;j=j+1){
a[i-1+j][j]=k;
k=k+1;
}
for(i=1;i<=n;i=i+1){
print( “换行符”);
for( j=1;j<=i;j=j+1)
print(a[i][j]);
}