螺旋数组

题目描述:给定一个m×n的数组将1-m*n的数填入数组中

如给定3x3数组,输出

1 2 3

8 9 4

7 6 5

思路:首先问题可以考虑为由外向内一环一环的构造。而构造每一个环时,可分为4个步骤,左→右,上→下,右→左,下→上。

分别定义最左列为left,最右列为right,最上行为up,最下行为down。初始时left = 0; right = n - 1, up = 0; down = m - 1;当前的行列为i,j; 当填入最后一个数时程序返回。

 1 #include <stdio.h>
 2 #define M 1024
 3 #define N 1024
 4
 5 int main(){
 6     int m, n;
 7     int a[M][N];
 8     while(scanf("%d%d", &m, &n) != EOF){
 9         int up = 0, down = m - 1;
10         int left = 0, right = n - 1;
11         int i = up, j = left;
12         int num = 1;
13         int flag = m * n + 1;
14         while(1){
15             while(j <= right){
16                 a[i][j] = num++;
17                 j++;
18             }
19             if(num == flag) break;
20             j--;
21             up++;
22             i = up;
23             while(i <= down){
24                 a[i][j] = num++;
25                 i++;
26             }
27             if(num == flag) break;
28             i--;
29             right--;
30             j = right;
31             while(j >= left){
32                 a[i][j] = num++;
33                 j--;
34             }
35             if(num == flag) break;
36             j++;
37             down--;
38             i = down;
39             while(i >= up){
40                 a[i][j] = num++;
41                 i--;
42             }
43             if(num == flag) break;
44             i++;
45             left++;
46             j = left;
47         }
48         printf("output\n");
49         for(i = 0; i < m; i++){
50             for(j = 0; j < n; j++){
51                 printf("%d\t", a[i][j]);
52             }
53             printf("\n");
54         }
55     }
56     return 0;
57 }
时间: 2024-10-12 17:41:42

螺旋数组的相关文章

Java 螺旋数组的实现方式-一个循环实现哦

随着编程的学习和工作,感触越来越深的,就是如何做好对需求的理解.那么在学习的过程中,就是如何将一个实际问题,转化成计算机语言去实现.我觉得我的这方面的能力很是欠缺啊. 今天分享一下一个螺旋数组例子的分析: 贴上code: package excesize; /* * 螺旋数组: * 4 * 1 2 3 4 * 12 13 14 5 * 11 16 15 6 * 10 9 8 7 */ public class LuoxuanArray { public static void main(Stri

用java实现螺旋数组

接收数组的行数和列数,返回正序和倒序的螺旋数组 package cn.baokx; public class Test { public static void main(String[] args) { printArray(getSpiralArray(5,5,false)); System.out.println("**************"); printArray(getSpiralArray(5,5,true)); } //打印二维数组 public static vo

简单的解析下螺旋数组

先简要的讲下思路: 螺旋数组因为数组的排列像一个海螺所以就被称作螺旋数组(讲点废话,这个是我杜撰的)大体的形状就如图片所显示的,那好下面我们就开始画圈圈,每一圈可以看作四步:第一 先把上面的边画出来,第二 把右边的边画出来, 第三 把下边的边画出来 ,第四  把左边的边画出来.画玩第一个圈,接着画里面的一个圈,第一...第二 ..第四..画完之后去里面没有圈了.然后再画里面的里面的圈,直到画不动了(超出了数组的最大索引量)再停下来:嗯 思路就是这么个思路,下面是贴代码的时候: 1 static

PHP实现螺旋矩阵(螺旋数组)

今天碰到一个比较有意思的问题, 就是把A到Y这25个字母以下面的形式输出出来 A B C D E P Q R S F O X Y T G N W V U H M L K J I 问题很有意思,就是转圈圈把字母填到表格中,要输出这样的格式,其实就需要构造一个下面这样的表格 1 2 3 4 5 16 17 18 18 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 这其实是一个螺旋矩阵的问题, 这跟下面这个问题本质是一样的: 给定一个行数row和列数cols,

数组-13. 螺旋方阵

1 /* 2 * Main.c 3 * E13-数组-13. 螺旋方阵 4 * Created on: 2014年8月25日 5 *******测试通过*********** 6 * 7 */ 8 9 #include <stdio.h> 10 11 int main(void) { 12 13 int array[11][11]; 14 int n; //题目中的N 15 16 scanf("%d", &n); 17 18 int upBound = 0; //上

【Java学习笔记之八】java二维数组及其多维数组的内存应用拓展延伸

多维数组声明 数据类型[][] 数组名称; 数据类型[] 数组名称[]; 数据类型数组名称[][]; 以上三种语法在声明二维数组时的功能是等价的.同理,声明三维数组时需要三对中括号,中括号的位置可以在数据类型的后面,也可以在数组名称的后面,其它的依次类推. 例如: int[][] map; char c[][]; 和一维数组一样,数组声明以后在内存中没有分配具体的存储空间,也没有设定数组的长度.  -------------------------------------------------

趣味数组(二)

今天,继续讲趣味数组. 1.编程然后请输出这样的一个数组: 这和我们线代中学的上三角矩阵有点类似.我们在处理这个问题时,我们按照层来处理,不是一般的行列. 那么啥是层呢?例如:1就是第一层,2,3 就是第二层,456就是第三层,以此类推.在这里我们可以发现,层号和这个层里面所包含的元素个数是相同的. 设层号是 i,每一层所包含的元素个数为 j.那么,i 的范围是 i∈[1,n], j∈[1,i]. 这样我们就能很快的找出每一个元素位置的坐标关系:a[i-j+1][j] 代码如下: int a[1

leetCode 54.Spiral Matrix(螺旋矩阵) 解题思路和方法

Spiral Matrix Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. For example, Given the following matrix: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] You should return [1,2,3,6,9,8,7,4,5]. 思路:螺旋数组,需

恒生电子笔试题

(一)论述题 1.你知道几种设计模式,介绍你了解的设计模式; 2.java中final的用法,请用程序示例说明; 3.jsp有哪些内置对象; 4.linux系统的命令; 5.设计表结构,背景:一个小学有六个年级,每个年级有五个班,现在校领导想要统计全校学生年级从高年级到低年级各科成绩从高到低,全校学生总成绩; 6.写第五题的sql; (二)算法题 1.有数组a[]={12,13,14,2,4,5,7,9,3,6},中间有连续递增的子数组,如{12,13,14},{2,4,5,7,9},{3,6}