1160 蛇形矩阵

时间:2022-05-08
本文章向大家介绍1160 蛇形矩阵,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1160 蛇形矩阵

 时间限制: 1 s

 空间限制: 128000 KB

 题目等级 : 白银 Silver

题解

题目描述 Description

小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和.

输入描述 Input Description

n(即n行n列)

输出描述 Output Description

n+1行,n行为组成的矩阵,最后一行为对角线数字之和

样例输入 Sample Input

3

样例输出 Sample Output

5 4 3 6 1 2 7 8 9 25

 1 #include<iostream>
 2 using namespace std;
 3 int now=1;
 4 int a[101][101];
 5 int s=0;
 6 int fx=1;// 1右 2左 3上 4下 
 7 int tot=1;
 8 int ans=0;
 9 int main()
10 {
11     int n;
12     cin>>n;
13     s=n/2+1;
14     int i=s;
15     int j=s;
16     a[i][j]=now;
17     now++;
18     while(tot!=n*n)
19     {
20         if(fx==1&&j-i==1)
21         {
22             fx=3;
23             //a[i][j]=now;
24             //now++;
25         //    tot++;
26         }
27         if(fx==2&&i==j)
28         {
29             fx=4;
30             //a[i][j]=now;
31         //    now++;
32         //    tot++;
33         }
34         if(fx==3&&(i+j==n+1))
35         {
36             fx=2;
37             //a[i][j]=now;
38         //    now++;
39         //    tot++;
40         }
41         if(fx==4&&(i+j==n+1))
42         {
43             fx=1;
44             //a[i][j]=now;
45         //    now++;
46         //    tot++;
47         }
48         if(fx==1)// 1右 2左 3上 4下 
49         {
50             j++;
51             a[i][j]=now;
52             now++;
53             tot++;
54         }
55         if(fx==2)// 1右 2左 3上 4下 
56         {
57             j--;
58             a[i][j]=now;
59             now++;
60             tot++;
61         }
62         if(fx==3)// 1右 2左 3上 4下 
63         {
64             i--;
65             a[i][j]=now;
66             now++;
67             tot++;
68         }
69         if(fx==4)// 1右 2左 3上 4下 
70         {
71             i++;
72             a[i][j]=now;
73             now++;
74             tot++;
75         }
76     }
77     for(int i=1;i<=n;i++)
78     {
79         for(int j=1;j<=n;j++)
80         {
81             cout<<a[i][j]<<" ";
82             if((i+j==n+1)||(i==j))
83             ans=ans+a[i][j];
84         }
85         cout<<endl;
86     }
87     cout<<ans;
88     return 0;
89 }