运行结果如下图:

解题思路:可以将这个问题分解成x个外围正方形所围成的图形,外围的正方形又可以分为4个步骤,向右依次增大、向下依次增大、向左依次增大、向上依次增大。基本思路就是如此,最关键的就是什么时候是转折的时候,比如向右增大到接下来的向下增大转折条件是什么,我没细究所以给外围加了围墙(数组初始化为0,在输入n后在外围全赋值为1)作为判定条件,详细看代码

以下给出代码示例:

#include <stdio.h>//自己写的code 
#define N 20
//解决的问题:数字从1开始顺时针填入n行n列数组
int arrary[N][N]={0};
 
void assist(int);
void deal(int &,int,int);
 
int main()
{
    int row=1,column=1,i=row,j=column,n;
    int count=0,num=1;
    printf("请输入旋转方阵的阶数:"); 
    scanf("%d",&n);
    assist(n);
    while(count!=(n%2==0? n/2:n/2+1))
    {
    deal(num,row,column);
    count++; row++; column++;
    }
 
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++)
            printf("%4d  ",arrary[i][j]);        
        printf("\n");
    }
 
}
 
void assist(int n)//外加围墙
{
 
   for(int j=0;j<=n+1;j++)
   arrary[0][j]=1;
   for(int i=0;i<=n+1;i++)
   arrary[i][n+1]=1;
   for(int j=n+1;j>=0;j--)
    arrary[n+1][j]=1;
   for(int i=n+1;i>=0;i--)
    arrary[i][0]=1;
 }
 
 
void deal(int &num,int column,int row)
{
    int i,j;
    i=row;j=column;
    for(j=column;;j++)//右横
    {
    if(arrary[row][j])break;
    arrary[row][j]=num++;
    }column=j-1;
 //printf("column:%d\n",column);测试数据时候检测
    for(i=row+1;;i++)//下
    {
    if(arrary[i][column])break;
    arrary[i][column]=num++;
    }row=i-1;
//printf("row:%d\n",row);
    for(j=column-1;;j--)//左横
    {
    if(arrary[row][j])break;
    arrary[row][j]=num++;
    }column=j+1;
// printf("column:%d\n",column);
    for(i=row-1;;i--)//上
    {
    if(arrary[i][column])break;
    arrary[i][column]=num++;
    }row=i-1;
//printf("row:%d\n",row);
 }

n阶方阵,数字从1~n^2,顺时针增大的更多相关文章

  1. 将n阶方阵左下半三角中的元素值置0.

    /*===================================== 将n阶方阵左下半三角中的元素值置0. 0<n<10. =========================== ...

  2. n阶方阵A可逆充分必要条件

    n阶方阵A可逆 充分必要条件:<=> A非奇异(非奇异矩阵就是对应的行列式不等于等于0的方阵)<=> |A|≠0 <=> r(A) = n <=> A的 ...

  3. 求n阶方阵的值(递归)

    若有n*n阶行列式A,则: |A|=A[1][1]*M[1][1]+A[1][2]*M[1][2]+...A[1][n]*M[1][n]:其中M[1][i] 表示原矩阵元素A[1][i]的代数余子式: ...

  4. n阶方阵的最值问题和对角线的和问题

    如题! package 矩阵2; public class JuZheng { public static void main(String args[]) { int array[][] = { { ...

  5. Lua用一维数组存储一个n阶方阵,输出这个方阵的正对角线上的数的和与反对角线上的数的和的差的绝对值。

    arr = {, , , , , , , , -} function diagonalDifference(arr) dimesion = math.sqrt(#arr) arr1 = {} sum1 ...

  6. YTU 3019: 螺旋方阵

    3019: 螺旋方阵 时间限制: 1 Sec  内存限制: 128 MB 提交: 2  解决: 2 题目描述 以下是一个5*5阶螺旋方阵.设计一个程序,输出该形式的n*n阶方阵(顺时针方向旋进).   ...

  7. Java 实现任意N阶幻方的构造

    一.关于单偶数阶幻方和双偶数阶幻方 (一)单偶数阶幻方(即当n=4k+2时) 任何4k+2 阶幻方都可由2k+1阶幻方与2×2方块复合而成,6是此类型的最小阶. 以6阶为例,可由3阶幻方与由0,1,2 ...

  8. Java 实现奇数阶幻方的构造

    一.设计的流程图如下所示 二.Java 语言的代码实现 package MagicSquare; //奇数幻方的实现 public class Magic_Odd { //n 为幻方的阶数 publi ...

  9. Project 3:N级魔方阵

    魔方阵:由n*n个数字所组成的n阶方阵,具有各对角线,各横列与纵行的数字和都相等的性质,称为魔方阵.而这个相等的和称为魔术数字.若填入的数字是从1到n*n,称此种魔方阵为n阶正规魔方阵. 目标:输入一 ...

随机推荐

  1. SQL Server-聚焦聚集索引对非聚集索引的影响

      前言 在学习SQL 2012基础教程过程中会时不时穿插其他内容来进行讲解,相信看过SQL Server 2012 T-SQL基础教程的童鞋知道前面写的所有内容并非都是摘抄书上内容,如若是这样那将没 ...

  2. Projective Texture Mapping - 投影纹理

    昨天导师让写一个投影纹理,将一个相机渲染的图片的一部分投影到另外一个相机里面,目的是无缝的拼接. 投影纹理就和shadow map一样,都是将片元转换到另外一个相机/光源坐标系下,投影后找到对应的纹素 ...

  3. Maven编译、打war包

    Eclipse环境,每次alt+F5刷新Maven项目时,总是会把项目的Java依赖刷新成1.5. 解决办法:在pom中加入如下片段 <plugin> <groupId>org ...

  4. 利用Arcade表达式显示多行标签

    要素图层依然是全球气象站点分布数据,属性表如下: 展示效果如下,显示的四行数据分别是属性表中的WIND_NAME,TEMP,WIND(运算之后的),R_HUMIDITY 本次尝试一次性写全所有的信息: ...

  5. github删除项目or仓库

    1. 登录 github (要注册账号) 2. 登录后点击右上侧头像,选择 Your profile . 3. 选择Repositories,可以查看已有的库,选择要删除的库进入. 4. 选择Sett ...

  6. 51nod-字符串连接

    输入n个字符串s[i],你要把他们按某个顺序连接起来,使得字典序最小. (1 <= n <= 100) (每个字符串长度 <= 100) (字符串只包含小写字母) Input 第一行 ...

  7. 命令行导入导出Mysql数据库

    MySQL命令行导出数据库:1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录,如我输入的命令行:cd C:\Program Files\MySQL\MySQL Serve ...

  8. WPF利用radiobutton制作菜单按钮

    原文:WPF利用radiobutton制作菜单按钮 版权声明:欢迎转载.转载请注明出处,谢谢 https://blog.csdn.net/wzcool273509239/article/details ...

  9. H5知识点

    一.总体变化 1.H5文档结构 <!DOCTYPE html> <html> <head> <title>  这是标题  </title> ...

  10. 洛谷 1063 dp 区间dp

    洛谷 1063 dp 区间dp 感觉做完这道提高组T1的题之后,受到了深深的碾压,,最近各种不在状态.. 初看这道题,不难发现它具有区间可并性,即(i, j)的最大值可以由(i, k) 与 (k+1, ...