zoukankan      html  css  js  c++  java
  • 奇数魔方

    魔方阵,古代又称“纵横图”,是指组成元素为自然数1、2…n2的平方的n×n的方阵,其中每个元素值都不相等,且每行、每列以及主、副对角线上各n个元素之和都相等。
    8 1 6
    
    
    3 5 7
    
    
    4 9 2


    魔方阵的排列规律如下:
    ⑴将1放在第一行中间一列;
    ⑵从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5在4的上一行后一列);
    ⑶如果上一个数的行数为1,则下一个数的行数为n(指最下一行);例如1在第一行,则2应放在最下一行,列数同样加1;
    ⑷当上一个数的列数为n时,下一个数的列数应为1,行数减去1。例如2在第3行最后一列,则3应放在第二行第一列;
    ⑸如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。例如按上面的规定,4应该放在第1行第2列,但该位置已经被占据,所以4就放在3的下面;

    1
    #include<stdio.h> 2 int main() 3 { 4 int n,sum=0,t,k,i,j; 5 scanf("%d",&n);//n阶魔方,且为奇数 6 sum=(1+n*n)*n*n/2/n; 7 int a[n][n]; 8 for(i=0;i<n;i++) 9 for(j=0;j<n;j++) 10 a[i][j]=0; 11 12 a[0][(n-1)/2]=1; 13 t=0,k=(n-1)/2; 14 for(i=2;i<=n*n;i++) 15 { 16 int s,m; 17 s=t; 18 m=k; 19 t=(t+n-1)%n; 20 k=(k+n+1)%n; 21 22 if(0==a[t][k]) 23 { 24 a[t][k]=i; 25 26 } 27 else 28 { 29 s=(s+1)%n; 30 a[s][m]=i; 31 t=s; 32 k=m; 33 } 34 35 36 } 37 for(i=0;i<n;i++) 38 { 39 for(j=0;j<n;j++) 40 { 41 printf("%d ",a[i][j]); 42 43 } 44 printf(" "); 45 } 46 }

  • 相关阅读:
    Java的JXL操作xls形式
    UILabel iOS添加文本控件
    并行随机梯度下降
    ArcGIS For Flex给定两个
    如何判断一个网址是由哪种语言写的
    ArrayList线程不安全?
    java总结,错误集
    centos安装Chromium
    读书笔记:《从一到无穷大》
    读书笔记:《数学之美》
  • 原文地址:https://www.cnblogs.com/a1225234/p/4454223.html
Copyright © 2011-2022 走看看