蛇形矩阵……

来源:互联网 发布:淘宝网店女鞋图片 编辑:程序博客网 时间:2024/06/10 08:15


问题链接……


#include<stdio.h>#define MAX 25int a[MAX][MAX]={0};void snake_matrix(int n){int i,j,k,m,r;//m为从1-n按顺序要存入数组的数,r是为了暂存数据用的i=j=k=0;//i,j为控制数组a下标的,k:比如说k为偶数,则从a[k][0]开始把m存入,是奇数则从a[0][k]开始把m存入for(k=0,m=1;k*k<n+1;k++){if(k%2==0)//k为偶数{i=k;j=0;r=m;while(m<=r+k&&m!=n+1)//从a[k][0]开始向右存入ma[i][j++]=m++;m--;r=m;j--;while(m<=r+k&&m!=n+1)//从a[k][k]开始向上存入ma[i--][j]=m++;}else{i=0;j=k;r=m;while(m<=r+k&&m!=n+1)//从a[0][k]开始向下存入ma[i++][j]=m++;m--;r=m;i--;while(m<=r+k&&m!=n+1)//从a[k][k]开始向左存入ma[i][j--]=m++;}}}void print(int n)//打印输出{int i,j,k;for(i=k=0;i<=MAX;i++){for(j=0;j<=MAX;j++)if(a[i][j]!=0)//如果是0不输出printf("%-4d",a[i][j]);else if((i+1)*(i+1)>n&&i*i<n)//如果最后一行前面有0,则用空格代替,比如输入98时,最后一行是0,0,99,98……printf("    ");elsebreak;//其它情况跳出循环printf("\n");if((i+1)*(i+1)>n)//如果最后一行输出完毕,就结束循环……break;}}void main(){int n;printf("n:");scanf("%d",&n);//输入蛇形矩阵的长度,为了正常显示,n应小于400snake_matrix(n);//生成长度为n的蛇形矩阵print(n);//输出生成蛇形矩阵}


原创粉丝点击