P5731【深基5.习6】蛇形方阵 题解
题目
题目传送门。
没什么可说的,直接跳过。
做法
思路
仔细观察输出,可以发现输出可以当做输出几个方框。
这样我们只要画出每个正方形就可以了。
Code实现
首先输入不用说了吧。 不会真有人不会吧
#include<bits/stdc++.h>//万能头启动
using namespace std;
int main()
{
int n;//不用说了吧,跟题目中名字一样
cin >> n;//cin直接输入
return 0;
}
要存答案,就要数组 因为是题单主题 所以我创建了二位数组 来存放答案。
int n,a[10][10];//用10正好存下最大9
当前生成的方框的边长我用了 来存,当前生成的坐标我用了 和 存。
int n,a[10][10],x = 1,y = 1;//注释君摸鱼了
我是用数字为线索开始for循环的,注意,是 。
a[1][1] = 1;//你别管我这样写,后面有用处
for(int i = 2;i <= n * n;i++)
判断当前的点的位置是否是在上端,在下端,在左端或右端。
判断上端: 。
判断下端: 。
判断左右端: 看啥呢,直接用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】蛇形方阵-题解/