`
CaptainCook
  • 浏览: 136846 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对一维顺序数组进行螺旋输出到二维数组

J# 
阅读更多

对一维顺序数组进行螺旋输出(不是顺序的话就先进行排序),如
1   2   3   4   5
16 17 18 19  6
15 24 25 20  7
14 23 22 21  8
13 12 11 10  9
主要思想:对用拥有X*Y个元素的数组分为Y行输出,每行X个数。
将螺旋输出的结果看做一个坐标系,将输出看做很多个不同大小的“口”,注意到一个规律:
输出“口”的上部分时,Y坐标不变,X坐标递增;输出右部分时,X坐标不变,Y坐标递增;以此类推...
可见输出一个“口”便是一个循环,那么就可以用这个循环来输出整个数组。

方法:定义四个变量记录“口”形的大小,xmax=X-1,ymax=Y-1,xmin=0,ymin=0,他们分别表示每个“口”的
最大x、y值和最小x、y值。

    现在,控制了“口”行的大小以及位置,接下来不停的将原一维数组输出到一个二维数组就可以了。再将
二维数组顺序列出就得到最终的螺旋输出了。

    如果是将这样一个二维数组输出到一维数组的话,根据这种思路,就变得更简单了。只需将
a[j][i++] = b[q++]; 改为 b[q++]= a[j][i++]; ,
void Output(int (*a)[X],int b[]) 改为void Output(int (*a)[X],int *b)
即可。
感觉这个方法比较笨拙,不知道有没有公式能直接计算出元素的位置,这样效率也许会快一点

 

#include<stdio.h>
#define X 11 //定义列数,改变这两行得到不同输出
#define Y 12 //定义行数

void Output(int (*a)[X],int b[])
{	int xmax=X-1,ymax=Y-1;
	int xmin=0,ymin=0;
	int i,j,q=0,all_n = X*Y;

	while(q < all_n) //不停的顺时针循环输出“口”形到二维数组,直到数组b的最后一个元素
	{	i = xmin,j = ymin;  //i为行坐标,j为纵坐标
		//一下四个while分别输出一次循环的四边 
		while(i <= xmax && q < all_n)//这个while是输出上边的,下面的以此类推。注意边界控制
			a[j][i++] = b[q++];
		i = xmax;
		j = ++ymin;

		while(j <= ymax && q < all_n)
			a[j++][i] = b[q++];
		j = ymax;
		i = --xmax;

		while(i >= xmin && q < all_n)
			a[j][i--] = b[q++];
		i =xmin;
		j = --ymax;

		while(j >= ymin && q < all_n)
			a[j--][i] = b[q++];
		++xmin;
	}

}
void main()
{   
	int a[Y][X];
    int b[Y*X];
	int p = Y*X;

	for(int k=0;k<p;k++)
		b[k]=k+1;
//------------------
	Output(a,b);
//------------------
	for(int i=0;i<Y;i++)
	{	for(int j=0;j<X;j++)
			printf("%-3d ",a[i][j]); 
		printf("\n");
	}
}
 

分享到:
评论

相关推荐

    螺旋打印任意二维数组

    该算法可以螺旋打印二维数组a[M][N],即,先打印第一行,然后打印最右边的一列,然后打印最下面的那一行,从右往左打印,接着打印最左边的那一列,从下往上打印。这样最外面的一圈打印完了,接着打印里面的一圈,按照...

    剑指Offer(Python多种思路实现):顺时针打印矩阵(同LeetCode 螺旋矩阵打印)

    题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 解题思路一: ...

    Python使用迭代器打印螺旋矩阵的思路及代码示例

    螺旋矩阵的打印首先要对n*n的数组进行赋值,根据规律可以看出,每一层都是按照右-&gt;下-&gt;左-&gt;上的顺序进行递增,因此,只要找出每一层的第一个数即可,第一个数值为上一层的第一个数+4*n-4,循环时n每次减2。...

    200个经典C程序源码小游戏

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 ...

    Competitive-Programming:使用C ++解决的每个编码问题的主列表

    查找二维数组中总和最大的行或列 以正弦波顺序打印2D阵列的元素 以螺旋形式打印2D阵列的元素 检查两个字符串是否彼此置换 从适当的字符串中删除连续的重复字符 反转字符串中的每个单词 从适当的字符串中删除所有出现...

    C语言实例解析精粹

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

    Java 入学考试题

    1、假如我们在开发一个系统时需要对员工进行建模,员工包含 3 个属性:姓名、工号以及工资。经理也是员工,除了含有...7、写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。

    220个C语言程序源代码.zip

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

    200个C程序.rar

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

    220个经典C程序源码文件,可以做为你的学习设计参考.zip

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

    200个经典C程序源码(包括基础篇+数据结构篇+数值计算与趣味数学篇+图形篇+系统篇+常见试题解答篇).zip

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

    220个C语言程序源代码集合.zip

    013 用二维数组实现矩阵转置 014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割...

    200个经典C程序【源码】

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

    黑马程序员入学测试题详解

    9、 写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 10、 28人买可乐喝,3个...

    C语言实例解析精粹(第二版) 光盘代码

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 ...

    C语言经典源代码实例 数据结构 操作系统 图形等

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

    经典的C程序220案列

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

    C语言源代码实例.rar

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

    关于C的精粹包含至少200个C语言小程序

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

    C语言220例从易到难源代码

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

Global site tag (gtag.js) - Google Analytics