zoukankan      html  css  js  c++  java
  • 数字方阵旋转问题

    数字方阵旋转问题

    要求

    输出一个(n*n)的数字方阵,方阵样式如下所示

    4 //输入的方阵大小
       1  12  11  10
       2  13  16   9
       3  14  15   8
       4   5   6   7
    

    解题思路

    数字旋转问题的输出是一个比较困难的问题,这里我们可以预先开辟一个数组,然后在数组对应的位置存储对应的数字,最后按照行数进行输出,可以很好地解决这个输出问题。

    对于如何计算出相应的位置,这里使用的是递归方法。每次解决方阵的最外层。函数(Num(number, begin, MatrixSize))有三个参数,第一个参数表示这一层开始的数字,表示是第几层,表示当前是多大的方阵。然后四个循环,计算出四条边位置。具体实现参考代码。

    代码实现

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=100;
    int a[maxn][maxn];
    void Num(int number, int begin, int MatrixSize)
    {
    	if(MatrixSize<1)
    		return ;
    	int i, j;
    	for(i=begin; i<=MatrixSize; i++) //先向下 
    	{
    		a[i][begin]=number++;
    	}
    	i-=1;
    	for(j=begin+1; j<=MatrixSize; j++) // 然后向右 
    	{
    		a[i][j]=number++;
    	}
    	j-=1;
    	for(i-=1; i>=begin; i--) //再向上 
    	{
    		a[i][j]=number++;
    	}
    	i+=1;
    	for(j-=1; j>begin; j--) //最后再向左 
    	{
    		a[i][j]=number++;
    	}
    	Num(number, begin+1, MatrixSize-1);
    }
    void disp(int b[][maxn], int n)
    {
    	for(int i=1; i<=n; i++)
    	{
    		for(int j=1; j<=n; j++)
    			printf("%4d", b[i][j]);
    		printf("
    ");
    	}		
    }
    int main()
    {
    	int n;
    	scanf("%d", &n);
    	Num(1, 1, n);
    	disp(a, n);
    	return 0;
    }
    
    欢迎评论交流!
  • 相关阅读:
    根据索引删除数组内信息时导致程序崩溃
    C/C++判断字符串是否包含某个子字符串
    Qwidget布局操作之QGridLayout(网格布局)
    Qt获取文件路径、文件夹路径
    javascript DOM document属性
    javascript dom页面中的location属性
    javascript页面常用事件
    python的高阶函数式编程
    python set 集合复习--点滴
    python异常
  • 原文地址:https://www.cnblogs.com/alking1001/p/11887205.html
Copyright © 2011-2022 走看看