OR81. 打印回形数
描述
回形数是一个矩阵输出,从矩阵的左上角往右开始打印数字0,遇到矩阵边界时,顺时针90方向继续打印,并数字增长1,如此类推直到把矩阵填满,输入一个整形宽和高单位,每输出一个数字,占用1单位宽高空间,根据入参打印出对应的回形数输入描述
矩阵的宽高输出描述
回字形的矩阵示例1
输入:
8 3
输出:
00000000 34444441 22222221
说明:
顺时针从0开始C 解法, 执行用时: 1ms, 内存消耗: 352KB, 提交时间: 2019-03-16
#include<stdio.h> #include<string.h> int main(){ int mat[100][100],width,height,i=0,j=-1,num=0,x=1; scanf("%d%d",&width,&height); memset(mat,-1,sizeof(mat)); while(x<width*height){ while(j+1<width&&mat[i][j+1]==-1){ mat[i][++j]=num; x++; } num++; while(i+1<height&&mat[i+1][j]==-1){ mat[++i][j]=num; x++; } num++; while(j-1>=0&&mat[i][j-1]==-1){ mat[i][--j]=num; x++; } num++; while(i-1>=0&&mat[i-1][j]==-1){ mat[--i][j]=num; x++; } num++; } for(i=0;i<height;i++){ for(j=0;j<width;j++) printf("%d",mat[i][j]); printf("\n"); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 220KB, 提交时间: 2019-03-29
#include<stdio.h> #include<string.h> int main(){ int mat[100][100],width,height,i=0,j=-1,num=0,x=1; scanf("%d%d",&width,&height); memset(mat,-1,sizeof(mat)); while(x<width*height){ while(j+1<width&&mat[i][j+1]==-1){ mat[i][++j]=num; x++; } num++; while(i+1<height&&mat[i+1][j]==-1){ mat[++i][j]=num; x++; } num++; while(j-1>=0&&mat[i][j-1]==-1){ mat[i][--j]=num; x++; } num++; while(i-1>=0&&mat[i-1][j]==-1){ mat[--i][j]=num; x++; } num++; } for(i=0;i<height;i++){ for(j=0;j<width;j++) printf("%d",mat[i][j]); printf("\n"); } return 0; }