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

题目

题目传送门
没什么可说的,直接跳过。

做法

思路

仔细观察输出,可以发现输出可以当做输出几个方框。

这样我们只要画出每个正方形就可以了。

Code实现

首先输入不用说了吧。 不会真有人不会吧

#include<bits/stdc++.h>//万能头启动
using namespace std;
int main()
{
  int n;//不用说了吧,跟题目中名字一样
  cin >> n;//cin直接输入
  return 0;
}

要存答案,就要数组 因为是题单主题 所以我创建了二位数组 aa 来存放答案。

int n,a[10][10];//用10正好存下最大9

当前生成的方框的边长我用了 mm 来存,当前生成的坐标我用了 xxyy 存。

int n,a[10][10],x = 1,y = 1;//注释君摸鱼了

我是用数字为线索开始for循环的,注意,是 n×nn × n

a[1][1] = 1;//你别管我这样写,后面有用处
for(int i = 2;i <= n * n;i++)

判断当前的点的位置是否是在上端,在下端,在左端或右端。
判断上端: x==1+(nm)/2x == 1 + (n - m) / 2
判断下端: x==n((nm)/2)x == n - ((n - m) / 2)
判断左右端: 看啥呢,直接用else。

开始填if,这个过程直接上code 懒得写了

if(x == 1 + (n - m) / 2)        //最上面
  if(y == n - ((n - m) / 2))
    x++;
  else
     y++;
else if(x == n - ((n - m) / 2)) //最下面
  if(y == 1 + (n - m) / 2)
    x--;
  else
    y--;
else                            //左右两端
  if(y == 1 + (n - m) / 2)//左端
    x--;
  else                    //右端
    x++;

现在再写上赋值。

a[x][y] = i;

最终判断一下是否画完当前方框。

if(x == 2 + (n - m) / 2 && y == 1 + (n - m) / 2)
  m -= 2;

输出不写了无量

最终整合代码。

最终代码来啦!!!

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,m,a[1010][1010],x = 1,y = 1;
	memset(a,0,sizeof(a));
    a[1][1] = 1;
	cin >> n,m = n;
  for(int i = 2;i <= n * n;i++)
	{
		if(x == 1 + (n - m) / 2)
      if(y == n - ((n - m) / 2))
        x++;
      else
        y++;
    else if(x == n - ((n - m) / 2))
      if(y == 1 + (n - m) / 2)
        x--;
      else
        y--;
    else                     
            if(y == 1 + (n - m) / 2)
                x--;
            else                    
                x++;
        if(x == 2 + (n - m) / 2 && y == 1 + (n - m) / 2)
            m -= 2;
        a[x][y] = i;
	}
    for(int i = 1;i <= n;i++)
    {
        for(int j = 1;j <= n;j++)
            printf("%3d",a[i][j]);
        cout << endl;
    }
    return 0;
}

你最好别复制?想要名字变成棕色的可以

结尾

这是我的第一篇题解,希望各位大佬们可以帮我纠纠错,支持一下。


P5731【深基5.习6】蛇形方阵 题解
https://maqiyue114514.github.io/2024/07/27/P5731【深基5-习6】蛇形方阵-题解/
作者
maqiyue
发布于
2024年7月27日
更新于
2025年6月30日
许可协议