- 浏览: 280707 次
- 性别:
- 来自: 济南
文章分类
最新评论
看到一个很简单的题目,很想小时候数学课本后面找规律的思考题。
题目
给定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; } } }
(转载请注明作者和出处:http://blog.csdn.net/xiaowei_cqu未经允许请勿用于商业用途)
发表评论
-
unity基础开发----物体位移和旋转实用代码
2013-11-21 22:46 1270using UnityEngine; using Syst ... -
Android中View绘制优化之一---- 优化布局层次
2012-09-04 23:00 1074... -
Android中View绘制优化二一---- 使用<include />标签复用布局文件
2012-09-08 13:54 1055... -
Android中View绘制优化之三---- 优化View
2012-09-13 21:00 1083... -
兰林任务管理应用程序雏形版以及概要说明
2012-09-15 21:54 880... -
Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(上)
2012-10-10 18:14 1167... -
Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)
2012-10-17 20:05 862... -
Android中文件选择器的实现
2012-11-30 08:59 1173... -
【编译原理】使用Lex将C/C++文件输出为HTML文件
2012-07-20 09:37 107008年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大 ... -
【编译原理】正则表达式
2012-07-21 21:49 230508年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大 ... -
【OpenCV】访问Mat图像中每个像素的值
2012-07-22 07:10 1171今天百度搜资料还搜到了自己的。。。《访问图像中每个像素的值 ... -
【编译原理】用Yacc做语法分析
2012-07-23 05:47 177408年9月入学,12年7月毕 ... -
【UML】UML几种图的绘制
2012-07-24 09:49 99108年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大 ... -
【OpenCV】邻域滤波:方框、高斯、中值、双边滤波
2012-07-26 10:52 1460邻域滤波(卷积) 邻域算子值利用给定像素 ... -
【数据结构】排序算法:希尔、归并、快速、堆排序
2012-07-28 06:15 102508年9月入学,12年7月毕 ... -
【OpenCV】角点检测:Harris角点及Shi-Tomasi角点检测
2012-07-31 13:25 1546角点 特征检测与匹配 ... -
【UML】案例分析:机场运作系统
2012-08-01 17:22 313408年9月入学,12年7月毕 ... -
【OpenCV】边缘检测:Sobel、拉普拉斯算子
2012-08-04 13:41 1547边缘 边缘(edge)是指图像局部强度变化最显著的部分。主要 ... -
【OpenCV】Canny 边缘检测
2012-08-08 10:17 1997Canny 边缘检测算法 1986 ... -
【UML】案例分析:新型超市购物自助系统
2012-08-19 01:13 129608年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大 ...
相关推荐
在实际编程中,可能会遇到更复杂的情况,例如,输入的不是固定大小的矩阵,而是动态大小的二维数组,或者需要填充而不是仅打印螺旋数组。这时,你需要使用动态内存分配(如`new`运算符)来创建二维数组,并调整填充...
这将展示如何用C++实现螺旋数组的打印功能。 此外,还可以扩展这个程序,添加读取用户输入的功能,或者修改为动态生成大小的螺旋数组。还可以增加其他功能,比如生成螺旋数组、反转螺旋数组、查找特定元素等,这些...
结合这两个功能,我们可以轻松地测试螺旋打印算法,无需手动输入大型二维数组。这提高了代码测试的效率和可维护性。 总的来说,螺旋打印二维数组和自动生成二维数组是编程中实用的技巧,它们可以帮助我们更有效地...
该算法可以螺旋打印二维数组a[M][N],即,先打印第一行,然后打印最右边的一列,然后打印最下面的那一行,从右往左打印,接着打印最左边的那一列,从下往上打印。这样最外面的一圈打印完了,接着打印里面的一圈,按照...
螺旋矩阵,也称为螺旋顺序,是一种特殊的矩阵排列方式,它从矩阵的最外层开始,按照顺时针方向逐层填充元素。...在实践中,你还可以尝试优化代码,例如,使用更高效的数据结构或算法来实现螺旋矩阵。
这个函数接受一个二维数组和它的行数`m`和列数`n`作为参数,然后按照螺旋顺序打印数组的元素。注意,为了处理数组边缘情况,我们需要在每次遍历完一个边界后检查是否还有剩余的部分可以遍历。 这个经典算法面试题...
// 打印螺旋方阵 } ``` **程序解析**: - 定义了一个大小为5x5的二维数组`arr`。 - 通过嵌套循环依次填充每个边界,并更新数组中的值。 - 最后打印生成的螺旋方阵。 #### 版本三 ```c #define N 5 #define down ...
接下来,我们将设计一个算法来实现螺旋遍历。以下是一个简单的Java实现,即`SpiralMatrix.java`文件可能包含的代码: ```java public class SpiralMatrix { public static void spiralPrint(int[][] matrix) { if...
内螺旋矩阵算法是一种在二维数组中填充数字的特殊方式,其特点是数字按顺时针方向从数组中心向外螺旋式地填充。这种填充模式在数据结构和算法的学习中颇为有趣,因为它涉及到了数组的操作以及对角线元素的处理。在...
4. **螺旋打印算法**: - 初始化四个边界变量:`top`(上边界),`bottom`(下边界),`left`(左边界)和`right`(右边界)。它们分别初始化为0和数组的宽度减1。 - 使用一个主循环,只要`top 且`left ,就执行...
8. **输出结果**:最后,可以通过遍历整个二维数组并打印其内容,以展示生成的螺旋数组。 在提供的压缩包文件中,"text1_xunhuan.c"很可能是实现螺旋数组生成的源代码文件,而".dsp", ".dsw", ".ncb", ".opt", 和 ...
在C语言程序设计中,数组是一种非常基础且重要的数据结构,用于存储同...理解这些概念对于C语言的编程至关重要,因为它们涉及到基本的数据组织和算法设计。学习这些内容有助于提升编程能力,特别是在处理大型数据集时。
螺旋矩阵是一种特殊的二维数组,它的元素按照特定的螺旋顺序排列。在给定的场景中,我们需要实现一个程序,能够根据用户...这种问题在算法设计和数据结构的学习中很常见,有助于锻炼对二维数组的操作和逻辑控制的理解。
打印螺旋矩阵是编程中的一个经典问题,它涉及到数组操作和循环控制。在本问题中,我们需要创建一个M*N的螺旋矩阵,并进行打印。同时,题目还提到了计算N*N矩阵的行列式的值,这是一个线性代数中的概念。 首先,让...
首先,我们需要理解螺旋数组的规律。螺旋数组从左上角开始,沿着顺时针方向依次填充数字。当一行或一列填满后,数组的遍历会转向下一圈。例如,对于5x5的数组,其初始状态如下: ``` 1 2 3 4 5 16 17 18 19 6 15 24...
根据给定文件的信息,我们可以提炼出以下...这种类型的编程问题有助于提高编程者的逻辑思维能力和算法设计能力。对于初学者而言,这是一个很好的练习项目,可以帮助他们更好地掌握VB语言中的各种控制结构和数据结构。
在本压缩包“php-leetcode题解之二维数组回形排序打印.zip”中,主要包含的是使用PHP语言解决LeetCode算法问题的相关代码和解析,特别是关于二维数组的回形顺序打印。LeetCode是一个在线的编程练习平台,它提供了...
"趣味矩阵"这个概念可能指的是那些具有特殊打印模式或者规律的矩阵,例如螺旋矩阵、对角线矩阵等。这类问题通常旨在增强对矩阵操作的理解,同时也能增加编程的乐趣。 标题中的“趣味矩阵算法实现源代码”意味着我们...