c++题目名称:螺旋矩阵2(右下顺时)时间限制:1000ms内存限制:内存限制:256MB 提交通过率:50%

题目描述

描述

现要生成一个新的n行m列螺旋矩阵,规则如下:从矩阵的右下角(第n行第m列)出发,初始向左移动;如果无法前进,或者已经到过前方的格子,则向右转。在经过的格子中依次填入1, 2, 3, ..., n * m,求这一新的螺旋矩阵。

输入格式

一行,为两个不大于10的正整数n和m。

输出格式

n行m列的螺旋矩阵,每一数字占3位,如果数字不足3位,则在前面补充空格。

样例1

输入

4 4

输出

7 8 9 10 6 15 16 11 5 14 13 12 4 3 2 1

#include <bits/stdc++.h>
int main(){
    int a[15][15]={},n,m,cnt,s=0,t[4][2]={ {0,-1},{-1,0},{0,1},{1,0} };
    scanf("%d%d",&n,&m); int x=n,y=m;
    while(cnt<n*m){
        if(x+t[s][0]>n||x+t[s][0]<1||y+t[s][1]>m||y+t[s][1]<1||a[x+t[s][0]][y+t[s][1]]) s=(s+1)%4;
        cnt++,a[x][y]=cnt,x+=t[s][0],y+=t[s][1];
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++)
            if(a[i][j]) printf("%3d",a[i][j]);
            else printf("   ");
        printf("\n");
    }
    return 0;
}

压行版:

#include<bits/stdc++.h>
int main(){int a[15][15]={},n,m,cnt,s=0,t[4][2]={{0,-1},{-1,0},{0,1},{1,0}};scanf("%d%d",&n,&m);int x=n,y=m;while(cnt<n*m){if(x+t[s][0]>n||x+t[s][0]<1||y+t[s][1]>m||y+t[s][1]<1||a[x+t[s][0]][y+t[s][1]])s=(s+1)%4;cnt++,a[x][y]=cnt,x+=t[s][0],y+=t[s][1];}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++)if(a[i][j])printf("%3d",a[i][j]);else printf("   ");printf("\n");}return 0;}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值