• C++奇数魔方阵


    理解了算法的思想就很简单了,

    首先将1放到第一排的中间,然后向左上角走,当行数超过索引,则将该数放到最后一排接下来的一列中去,当列数超过索引,则放到上一排的第一列中去,若都没有超过索引,但是此时的右上角有数或是已经到魔方阵的最右上角那块,那么列数不变,向下行走去。每次放好一个数之后,数本身加1,并继续放已经加1后的数。

    #include<stdio.h>
    int IsAttact(int **p,int i,int j,int n)
    {
    if((i-1<=0)&&(j+1>n))
    {
    return 0;
    }
    else if(i-1<=0)
    {
    return 1;
    }
    else if(j+1>n)
    {
    return 2;
    }
    else if(p[i-1][j+1]!=0)
    {
    return 3;
    }
    else
    {
    return 4;
    }
    }
    void Cube(int **p,int n)
    {
    int i=1;
    int j=n/2+1;
    int sum=2;
    while (sum<=n*n)
    {
    int value=IsAttact(p,i,j,n);
    if(value==1)
    {
    i=n;j=j+1;
    p[i][j]=sum;
    }
    else if(value==2)
    {
    i=i-1;j=1;
    p[i][j]=sum;
    }
    else if(value==3||value==0)
    {
    i=i+1;
    p[i][j]=sum;
    }
    else if(value==4)
    {
    i=i-1;j=j+1;
    p[i][j]=sum;
    }
    sum=sum+1;
    }
    }
    void output(int **p,int n)
    {
    for(int i1=1;i1<=n;i1++)
    {
    for(int j1=1;j1<=n;j1++)
    {
    printf("%d ",p[i1][j1]);
    }
    printf("% ");
    }
    }
    void main()
    {
    int n;
    printf("请输入魔方的阶数 ");
    scanf("%d",&n);
    int **p=new int*[n];
    for(int i=1;i<=n;i++)
    {
    p[i]=new int[n];
    }
    for(int i1=1;i1<=n;i1++)
    {
    for(int j1=1;j1<=n;j1++)
    {
    p[i1][j1]=0;
    }
    }
    p[1][n/2+1]=1;
    Cube(p,n);
    output(p,n);
    }

  • 相关阅读:
    python基础(十七、变量进阶
    python基础(十六、变量进阶
    python基础(十五、变量进阶
    python基础(十四、变量进阶
    python基础(十三、综合应用
    MySQL-索引失效原理
    MySQL-忘记密码
    OSI七层模型
    Python-socket通信
    Python-编程小技巧
  • 原文地址:https://www.cnblogs.com/yunerlalala/p/5477437.html
Copyright © 2020-2023  润新知