随笔 - 31  文章 - 0  评论 - 0  阅读 - 3251

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;
  1. x1主要控制左边的范围;
  2. x2主要控制右边的范围;
  3. y1主要控制上面的范围;
  4. 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 < x2y < y2x > x1y > 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”

posted on   Mryan2005  阅读(115)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示