zoukankan      html  css  js  c++  java
  • 螺旋数组

    要求:螺旋数组是指将给定的存储连续自然数的二维数组中的数字从最外层开始以顺时针形式输出

    如:二维数组为
     {{1,2,3,4},
       {5,6,7,8},
     {9,10,11,12},
    {13,14,15,16}}
    则输出为:
     {{1,2,3,4},
     {12,13,14,5},
     {11,16,15,6},
     {10,9,8,7}}

    先上代码,然后再来分析代码的思路:
    #include<iostream>
    using namespace std;
    
    void full(int array[][4],int num,int start,int size)
    {
    	int i,j,k;
    	if(size==0)
    		return ;
    	if(size==1)
    	{
    		array[start][start]=num;
    		return;
    	}
    	i=start;
    	j=start;
    	for(k=0;k<size-1;k++)
    	{
    		array[i][j]=num;
    		j++;num++;
    	}
    	for(k=0;k<size-1;k++)
    	{
    		array[i][j]=num;
    		i++;num++;
    	}
    	for(k=0;k<size-1;k++)
    	{
    		array[i][j]=num;
    		j--;num++;
    	}
    	for(k=0;k<size-1;k++)
    	{
    		array[i][j]=num;
    		i--;num++;
    	}
    	full(array,num,start+1,size-2);//注意,每填写完一圈后,start的值加1
    	//size的值减2
    
    }
    int main()
    {
    	int array[4][4];
    	full(array,1,0,4);
    	for(int i=0;i<4;i++)
    	{
    		for(int j=0;j<4;j++)
    		{
    			cout<<array[i][j]<<' '<<' ';
    		}
    		cout<<endl;
    	}
    }
    思路分析:
    这个程序的核心思想是运用分治递归,即将整个螺旋数组看作是几个圈组成的,每一个圈就相当于调用一次full函数,注意此程序的技巧体现在full函数的参数上,即只需通过num,start与size这三个参数即可确认调用一次full函数。
    程序运行结果如下:


  • 相关阅读:
    数字签名(代码签名)流程
    (转)__cdecl __fastcall与 __stdcall
    装修主材
    ATL 获取flash信息
    Windows结构化异常
    格式化HRESULT获取对应文本
    which type of VS files should be committed into a version control system
    读Windows核心编程-5-作业
    IE WebBrowser事件触发
    Windows 结构化异常
  • 原文地址:https://www.cnblogs.com/hainange/p/6334083.html
Copyright © 2011-2022 走看看