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 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏chenjx85的技术专栏

leetcode-884-两句话中的不常见单词

给定两个句子 A 和 B 。 (句子是一串由空格分隔的单词。每个单词仅由小写字母组成。)

18830
来自专栏木子昭的博客

机器学习三剑客之NumpyNumpy计算(重要)

NumPy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。Numpy内部解除了Python的PI...

37660
来自专栏tkokof 的技术,小趣及杂念

编程小知识之 Random接口返回值

平日工作中,(伪)随机数的使用一定是避不开的,拿 C# 为例,System 命名空间下的 Random 类型一般都是我们生成(伪)随机数的第一选择:

11030
来自专栏数据结构与算法

洛谷P1067 多项式输出(模拟)

题目描述 一元 n 次多项式可用如下的表达式表示: ? 其中,aixi称为 i 次项,ai 称为 i 次项的系数。给出一个一元多项式各项的次数和系数,请按照如下...

30950
来自专栏mathor

Xor(滴滴笔试题)

 给出一个数组,问最多有多少个不重叠的非空区间,使得每个区间内的数字的xor都等于0。

9910
来自专栏计算机视觉与深度学习基础

全排列生成算法:next_permutation

概念 全排列的生成算法有很多种,有递归遍例,也有循环移位法等等。C++/STL中定义的next_permutation和prev_permutation函数则...

24060
来自专栏C语言及其他语言

【每日一题】问题1178:三进制小数

你的任务呢,是将一个有理数转换成三进制小数。“什么是三进制小数呢?”你一定会问,这很明白,就是以三为基(二进制数以2为基,而十进制数则以10为基)的小数。

13330
来自专栏desperate633

LintCode 搜索插入位置题目分析代码

给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。 你可以假设在数组中无重复元素。

8520
来自专栏Leetcode名企之路

【Leetcode】59. 螺旋矩阵 II

给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

14630
来自专栏数据结构与算法

洛谷T21776 子序列

题目描述 你有一个长度为 nn 的数列 ,这个数列由 0,10,1 组成,进行 mm 个的操作: 1~l~r1 l r :把数列区间 [l, r][l,r] ...

42780

扫码关注云+社区

领取腾讯云代金券