ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

P5731 【深基5.习6】蛇形方阵

2022-01-25 23:35:02  阅读:213  来源: 互联网

标签:towards 15 matrix exec int 深基 while 蛇形 P5731


P5731 【深基5.习6】蛇形方阵

题目描述

给出一个不大于 9 的正整数 n,输出n×n 的蛇形方阵。

从左上角填上 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 个字符,前面使用空格补齐。

输入格式

输出格式

输入输出样例

输入 #1复制

4

输出 #1复制

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

题解

我没有用常规的算法做,而是模拟,像是在玩贪吃蛇,一碰到边或是已填充的就转弯

python

n=eval(input())
matrix = [[0 for j in range(n)] for i in range(n)]
x,y=0,0

towards=['y=y+1','x+=1','y-=1','x-=1']
t=0
for i in range(1,n*n+1):
   matrix[x][y]=i
   exec(towards[t])
   if x>n-1 or y>n-1 or matrix[x][y]!=0:
      exec(towards[(t+2)%4])
      t=(t+1)%4
      exec(towards[t])
for i in (matrix):
   for j in i:
      print(f"{j: >3}",end='')
   print()

c++

同样是模拟,这篇是借鉴大佬改的,用了0的布尔值为否的特性来缩短代码量,相当优雅

#include <iostream>
using namespace std;
int a[15][15];
int main() {
    int n,k=1,x=1,y=0;
    cin>>n;
    while (k<=n*n){
        while(y<n&&!a[x][y+1])a[x][++y]=k++; //→
        while(x<n&&!a[x+1][y])a[++x][y]=k++; //↓
        while(y>1&&!a[x][y-1])a[x][--y]=k++; //←
        while(x>1&&!a[x-1][y])a[--x][y]=k++; //↑
    }
    for (int i=1;i<=n;i++){
        for (int j=1;j<=n;j++)printf("%3d",a[i][j]);
        cout<<endl;
    }
    return 0;
}

标签:towards,15,matrix,exec,int,深基,while,蛇形,P5731
来源: https://blog.csdn.net/cf260469080/article/details/122693781

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有