看到一个很简单的题目,很想小时候数学课本后面找规律的思考题。
题目
给定N打印如下数组:
解法一:循环N螺旋赋值
比较直观的思路是根据N来找规律。可以看到N为奇数时,数组是逆时针循环赋值;N为偶数时,顺时针。如下图所示:
所以在最外层循环N,很容易写出代码:
int n=0;cin>>n;
vector<vector<int> > T(n,vector<int>(n,0));
int num=0;
for(int k=1;k<=n;k++){
//奇数时逆时针赋值
if(k%2==1){
for(int j=0;j<k;j++)
T[k-1][j]=++num;
for(int i=k-2;i>-1;i--)
T[i][k-1]=++num;
}
//偶数时顺时针赋值
else{
for(int i=0;i<k;i++)
T[i][k-1]=++num;
for(int j=k-2;j>-1;j--)
T[k-1][j]=++num;
}
}
解法二:直接找数组规律
仔细观测数组,发现数组可以分为上下两个三角。在上三角中,数组纵坐标小于等于横坐标,数组纵向连续;下三角中,横坐标小于等于纵坐标,数组横向连续。
上三角:
上三角中,暗纵坐标的奇偶性分为两种情况。
- 纵坐标为奇数时,T[1][i]=i*i,即上图中第1,3,5列第一个元素分别为1,9,25。每列由上至下递减,即第3列3个元素分别为9,8,7.
- 纵坐标为偶数时,T[1][i]=(i-1)*(i-1)+1,即上图中第2,4,6列第一个元素分别为1+1=2,9+1=10,25+1=26。每列由上至下递增,即第4列4个元素分别为10,11,12,13.
上三角:
下三角中,按横坐标的奇偶性分为两种情况:
- 横坐标为偶数时,T[i][1]=i*i,即上图中第2,4,6行第一个元素分别为4,16,36。每行由左至右递减,即第4行3个元素分别为16,15,14.
- 横坐标为奇数时,T[i][1]=(i-1)*(i-1)+1,即上图中第3,5行第一个元素分别为4+1=5,16+1=17。每行由左至右递增,即第5行4个元素分别为17,18,19,20.
代码如下:
int n=0;cin>>n;
vector<vector<int> > T(n,vector<int>(n,0));
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(j>=i){
if(j%2==0)
T[i][j]=(j+1)*(j+1)-i;
else
T[i][j]=j*j+i+1;
}
else{
if(i%2==1)
T[i][j]=(i+1)*(i+1)-j;
else
T[i][j]=i*i+j+1;
}
}
}
分享到:
相关推荐
该算法可以螺旋打印二维数组a[M][N],即,先打印第一行,然后打印最右边的一列,然后打印最下面的那一行,从右往左打印,接着打印最左边的那一列,从下往上打印。这样最外面的一圈打印完了,接着打印里面的一圈,按照...
用C++实现将数组中元素以螺旋状顺序打印出来,包含代码以及介绍文档
将螺旋方阵存放到N×N的二维数组中并把它打印输出。要求程序自动生成下图所示螺旋方阵。用 #defined定义常量N,要求对N进行更改也能达到相同的效果。 1 16 15 14 13 2 17 24 23 12 3 18 25 22 11 4 19 20 21 10 5 6 ...
本文实例讲述了Python实现打印螺旋矩阵功能的方法。分享给大家供大家参考,具体如下: 一、问题描述 输入N, 打印 N*N 螺旋矩阵 比如 N = 3,打印: 1 2 3 8 9 4 7 6 5 N = 4,打印: 1 2 3 4 12 13 14 5 11 16...
3.螺旋打印二维数组(头条) 4.删除字符(第四范式) abcdabcd 4 bcdabcd bcdbcd cdbcd cdcd 5.螺旋三角形(第四范式) 5 1 2 12 3 13 11 4 14 15 10 5 6 7 8 9 6.二叉树的深度 7.排序 快排,归并,堆排序 8.二叉树路径...
C 打印输出旋转方阵,其中螺旋方阵形式如下,类似矩阵: 1 12 11 10 2 13 16 9 3 14 15 8 4 5 6 7 设row,column分别代表行、列坐标,变量p从1到n2将p依次存入数组a[row][column]中,要确定row、...
矩阵的螺旋顺序 在数组中实现 K 个堆栈 查找数组中缺失的数字 在排序数组中搜索,列表继续。 链表 像数组一样,链表也是一种线性数据结构,只是它的元素不存储在连续的位置。 以下是我尝试过的一些问题,并针对 ...
LeetCode解题总结 ...15.8.1 螺旋打印矩阵 15.8.2 生成螺旋矩阵 15.9 Z字形输出字符串 15.10 不使用乘、除、取模实现两个整数相除 15.11 文本对齐 15.12 共线的最大点数 16 其他问题 16.1 随机数生成器
顺时针打印螺旋矩阵方阵】 sort topic 1. 2. 3. 4. 5. 6. 7. 8. 9. binary-search topic 1. 【有序数据中,查找等于target的index左右边界】 2. 【有序数组查找目标值的index。如果目标值不存在于数组中,返回它将会...
螺旋矩阵 lc.88.合并两个有序数组 1.2 链表 题目 备注 进度 so.3.从尾到头打印链表 so.14.链表中倒数第k个结点 so.15.反转链表 so.16.合并两个排序的链表 so.25.复杂链表的复制 so.36.两个链表的第一个公共结点 so....
JavaScript算法 JavaScript算法 内容 ->不使用内置数组方法的字符串反转 ->回文检查 ->查找数组中的最大连续1 ...->打印步骤 ->印刷金字塔 ->找到元音 ->输入矩阵螺旋 ->斐波那契 ->记忆 ->排队编织 ->与堆栈队列
实例172 打印n阶螺旋方阵 247 5.5 生活中的数学 249 实例173 求车运行速度 249 实例174 卖西瓜 250 实例175 打渔晒网问题 251 实例176 水池注水问题 252 实例177 捕鱼和分鱼问题 253 实例178 递归解...
以螺旋形式打印给定矩阵(中) 按行和按列排序的二维数组中的第 K 个最小元素 | 设置 1(硬) 最大和连续子阵列(中) 铁路/汽车站所需的最少站台数量(中) 找到丢失的数字(简单) 合并两个已排序的数组(简单) ...
Introduction_to_algorithm 《算法简介》实现书 内容(仍在增长) 单链表 堆和堆排序 合并排序 AVL树和AVL排序 Knuth-Morris-Pratt(KMP)算法 ...螺旋矩阵打印 θ(logn)大指数算法 O(1)Febonacci算法
任务 : 编写一个程序,该程序以顺时针螺旋顺序打印/返回2D矩阵的元素。抽象的: 就性能而言,编写短代码并不总是意味着它是高质量的代码。 同样,编写更长的代码并不意味着它是不好的代码! Numpy数组由于其同质...