蛇形方阵
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
蛇形方阵
算法描述:本题要求打印n阶蛇形方阵,可知该题目主要考察对二维数组的应用。
而方阵具体的数字的赋值则是考察学生的算法,只要算法合理,就可以打印出来。
主函数(main):由于题目比较简单,只要找出简便的算法,按照规律赋值即可,所以仅需主函数就可以清晰的实现程序。
考虑到蛇形方阵的形状,仔细观察就可以得出以下结论:1)整体上方阵是从左上角到右下角数字递增。
2)数字是从1到n*n递增。
3)如果沿着次对角线的方向观察方阵,则可得到次对角线方向的行数有2*n-1行。
4)次对角线方向上奇数行的数字从下往上递增,偶数行的数字从上往下递减。
观察到以上规律后就可以编写程序,但赋值时需要分为上三角以及下三角分别赋值,因为要打印方阵,而不是三角阵。
定义从1开始每次调用后自增1的变量,然后按照规律给次对角线方向的行依次赋值直到达到次对角线方向的第n行。
然后在定义从n*n开始每次调用后自减1的变量,按照规律给次对角线方向的第2*n-1行赋值到第n+1(包括n+1)行,最后通过两个for循环打印方阵即可。
源程序:
见no5.cpp
测试数据:如图所示:
具体代码如下:
/*
打印如下方阵
蛇形方阵:
1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16
*/
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,j,k,m,n,x,h,y;
int a[15][15]={0};
printf("输入蛇形方阵的阶数:");
scanf("%d",&i);
k=1;
for(n=1;n<=i;n++) //上三角的循环
{
if(n%2==1)
{
y=n-1;
x=0;
for(;y>=0;)
a[y--][x++]=k++;
}
if(n%2==0)
{
x=n-1;
y=0;
for(;x>=0;)
a[y++][x--]=k++;
}
}
k=(n-1)*(n-1);
for(n=2*i-1;n>=i;n--) //下三角的循环
{
if(n%2==0)
{
x=i-1;
y=i-(2*i-1-n);
for(;y<=i-1;)
a[y++][x--]=k--;
}
if(n%2==1)
{
y=i-1;
x=i-(2*i-1-n);
for(;x<=i-1;)
a[y--][x++]=k--;
}
}
for (h=0;h<i;h++) {
for (j=0;j<i;j++)
printf("%5d",a[h][j]);
printf("\n");
}
system("pause");
return 0;
}。