zoukankan      html  css  js  c++  java
  • 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);
    }

  • 相关阅读:
    Coding Souls团队第二阶段冲刺(三)
    Coding Souls团队第二阶段冲刺(二)
    第一阶段意见评价
    PHPMailer/PHPMailer的使用
    使用jquery.media.js实现pdf在线预览
    select2(前端选择框_框架)
    安装Docker CE+阿里云镜像仓库
    docker学习
    前端开发框架WeUI
    php _Markdown转HTML
  • 原文地址:https://www.cnblogs.com/yunerlalala/p/5477437.html
Copyright © 2011-2022 走看看