PTA | 7-9 螺旋方阵
1.7-13(选做) 装箱问题
2.PTA | 7-9 螺旋方阵
题目
所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。
输入格式:
输入在一行中给出一个正整数N(<10)。
输出格式:
输出N×N的螺旋方阵。每行N个数字,每个数字占3位。
输入样例:
5
输出样例:
1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9
我的思路
翻译过来的意思是:
先沿着x轴铺,再沿着y轴铺,铺完一圈后,再铺里面一圈,最中间的那个最后再铺。
至于X轴的转角处要留给Y轴的铺,Y轴的转角处要留给X轴的铺,主要是因为防止重叠。
铺完一圈之后,我们就要把它们的铺地范围缩小,然后再铺地。
分解教学
声明和输入必要变量
int N; scanf("%d", &N); int a[10][10] = {0}; int num = 1; int count = 1;
声明控制范围圈的东西
int x1 = 0; int x2 = N - 1; int y1 = 0; int y2 = N - 1;
- x1主要控制左边的范围;
- x2主要控制右边的范围;
- y1主要控制上面的范围;
- y2主要控制下面的范围。
主程序
while (count < N*N) { for(int x = x1; x < x2; x++) { a[y1][x] = num++; count++; } for(int y = y1; y < y2; y++) { a[y][x2] = num++; count++; } for(int x = x2; x > x1; x--) { a[y2][x] = num++; count++; } for(int y = y2; y > y1; y--) { a[y][x1] = num++; count++; } if(x1 != x2 && y1 != y2) { x1++; y1++; y2--; x2--; } }
x < x2
、y < y2
、x > x1
和y > y1
主要用于让X轴的转角处要留给Y轴的铺,Y轴的转角处要留给X轴的铺
设置中心点的值
if(x1 == x2 && y1 == y2) { a[y1][x1] = num; }
输出各个点的值
for(int y = 0; y < N; y++) { for(int x = 0; x < N; x++) { printf("%3d", a[y][x]); } printf("\n"); }
代码全文
#include <stdio.h> int main() { // init int N; scanf("%d", &N); int a[10][10] = {0}; int x1 = 0; int x2 = N - 1; int y1 = 0; int y2 = N - 1; int num = 1; int count = 1; // let's go while (count < N*N) { for(int x = x1; x < x2; x++) { a[y1][x] = num++; count++; } for(int y = y1; y < y2; y++) { a[y][x2] = num++; count++; } for(int x = x2; x > x1; x--) { a[y2][x] = num++; count++; } for(int y = y2; y > y1; y--) { a[y][x1] = num++; count++; } if(x1 != x2 && y1 != y2) { x1++; y1++; y2--; x2--; } } if(x1 == x2 && y1 == y2) { a[y1][x1] = num; } // output for(int y = 0; y < N; y++) { for(int x = 0; x < N; x++) { printf("%3d", a[y][x]); } printf("\n"); } }
var code = “7adc6c5c-c486-437a-93ff-66edb3a4a064”
本文来自博客园,作者:Mryan2005,转载请注明原文链接:https://www.cnblogs.com/Mryan2005/p/17872790.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架