- 题解
H1012螺旋输出
- 2024-1-29 8:46:20 @
TLE了114514次
往一个方阵里填数1-n²,看一下原题里的:
1 2 3
8 9 4
7 6 5
不难发现,填数先往右填,碰到了边界转向下,向左,向上,再向右,直到结束
所以就是设一个二维数组来填数,用xy表示,碰到边界或者其他数就转向,写4个while循环
上AC代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int g[501][501]={};
int n;
cin>>n;
g[1][1]=1;
for(int i=2,x=1,y=1;i<=n*n;){
while(y+1<=n && g[x][y+1]==0){
g[x][y+1] = i;
i++;
y++;
}
while(x+1<=n && g[x+1][y]==0){
g[x+1][y] = i;
i++;
x++;
}
while(y-1>=1 && g[x][y-1]==0){
g[x][y-1] = i;
i++;
y--;
}
while(x-1>=1 && g[x-1][y]==0){
g[x-1][y] = i;
i++;
x--;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<g[i][j]<<' ';
}cout<<endl;
}
}
源码():
#include <bits/stdc++.h>
using namespace std;
int main () {
int n;
cin >> n;
if(n == 1)
cout << " 1\n";
if(n == 2)
cout <<" 1 2\n 4 3\n";
if(n == 3) {
cout << " 1 2 3\n";
cout << " 8 9 4\n";
cout << " 7 6 5\n";
}
if(n == 4) {
cout << " 1 2 3 4\n";
cout << " 12 13 14 5\n";
cout << " 11 15 16 6\n";
cout << " 10 9 8 7\n";
}
if(n == 5) {
cout << " 1 2 3 4 5\n";
cout << " 16 17 18 19 6\n";
cout << " 15 24 25 20 7\n";
cout << " 14 23 22 21 8\n";
cout << " 13 12 11 10 9\n";
}
if(n == 6) {
cout << " 1 2 3 4 5 6\n";
cout << " 20 21 22 23 24 7\n";
cout << " 19 32 33 34 25 8\n" ;
cout << " 18 31 36 35 26 9\n";
cout << " 17 30 29 28 27 10\n";
cout << " 16 15 14 13 12 11\n";
}
if(n == 7) {
cout << " 1 2 3 4 5 6 7\n";
cout << " 24 25 26 27 28 29 8\n";
cout << " 23 40 41 42 43 30 9\n";
cout << " 22 39 48 49 44 31 10\n";
cout << " 21 38 47 46 45 32 11\n";
cout << " 20 37 36 35 34 33 12\n";
cout << " 19 18 17 16 15 14 13\n";
}
if(n == 8) {
cout << " 1 2 3 4 5 6 7 8\n";
cout << " 28 29 30 31 32 33 34 9\n";
cout << " 27 48 49 50 51 52 35 10\n";
cout << " 26 47 60 61 62 53 36 11\n";
cout << " 25 46 59 64 63 54 37 12\n";
cout << " 24 45 58 57 56 55 38 13\n";
cout << " 23 44 43 42 41 40 39 14\n";
cout << " 22 21 20 19 18 17 16 15\n";
}
if(n == 9) {
cout << " 1 2 3 4 5 6 7 8 9\n";
cout << " 32 33 34 35 36 37 38 39 10\n";
cout << " 31 56 57 58 59 60 61 40 11\n";
cout << " 30 55 72 73 74 75 62 41 12\n";
cout << " 29 54 71 80 81 76 63 42 13\n";
cout << " 28 53 70 79 78 77 64 43 14\n";
cout << " 27 52 69 68 67 66 65 44 15\n";
cout << " 26 51 50 49 48 47 46 45 16\n";
cout << " 25 24 23 22 21 20 19 18 17\n";
}
return 0;
}
vocal
3 条评论
-
wangziyin 梓印大大帅 LV 10 @ 2024-1-29 23:33:22
👍
-
2024-1-29 11:35:48@
👍 666
-
2024-1-29 11:35:40@
啊?
- 1