列表

详情


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;
}

上一题