奇階魔方陣的程序算法+c語言

/************************************************
 *   File name      :magic_square.c
 *   CopyRight      :2011-03-25,All rights Reserved.
 *   Module name    :...
     *
 *   CPU            :ARM7
 *   RTOS           :....
     *
 *   Create Date    :2011-03-25

 *   Author/Corporation:  hackerling/maple Corporation
 *
 *   Abstract Description :
 *
 *
 *   ---------------Revision History--------------
 *   No  Version  Date       Revised By   Item      * 
 *    1        1.0       2011-3-25        王小毛                                             *

奇階魔方陣的程序,已調試成功 

注:這是個老程序了,很多人都會寫,我很菜,好久沒玩C了,最近學習了陳正衝老師的《c語言深度解剖》,很不錯的一本書,推薦閱讀!!!

故寫了一些小程序,僅當聯繫,奇階魔方陣是實現從1到n*n的自然數,形成一個矩陣,使每行每列都加起來爲一個固定的數,都相等.
 **************************************************************/

#include <stdio.h>
#include <stdlib.h>
#define  MAXSIZE 20
//魔方陣的入口函數,實現每行每列之和相加全等
void main()  //聲明變量不會分配內存,c++中默認初始值爲-858993460
{
 int magicsqr[MAXSIZE][MAXSIZE];  //魔方陣數組
 int i,j;  //做數組下表的處理
 int num;  //num就是用來作爲要填充的具體數據
 int n;   //n表示你輸入的魔方陣階數
 for(i=1;i<MAXSIZE;i++)    //對數組做初始化,爲了下面所做的判斷,需要注意的是下標爲0行與列不能初始化爲0
 {
  for(j=1;j<MAXSIZE;j++)
    {
   magicsqr[i][j]=0; 
  }
 }
 printf("Please input n(1~19,It must be odd):");
 scanf("%d",&n);
 while(!(n>0 && n< MAXSIZE) || n%2==0) //輸入數據限制
 {
  printf("The number you input is invalid,please input agian!");
  scanf("%d",&n);
 }
 j=n/2+1;
 magicsqr[1][j]=1;
 i=1;
 for(num=2;num<n*n+1;num++)
 {
  i=i-1;               //規則1:普通輸入規則,加入到上一行的右一列
  j=j+1;
  if(i==0&&j==n+1)   //規則2:對數組下表進行處理if-else結構,如果越界,即不在本數組下方
  {
   i=i+2;
   j=j-1;
  }
  else    //規則3:其餘的單邊越界(所謂單邊越界:就是說或者行或者列超過了魔方陣數組屆)
  {
   if(i==0)  {i=n;}
   if(j==n+1)  {j=1;}
  }
  if(magicsqr[i][j]==0)  //數據寫入魔方陣,if-else結構
  {
   magicsqr[i][j]=num;
  }
  else   //規則4:如果該數在輸入下一個要填入的數字時,它的右上角存在數字,即不爲0,作如下處理,放在它自己下方
  {
   i=i+2;                                                                                                      
   j=j-1;
   magicsqr[i][j]=num;
  }
 }
 for(i=1;i<n+1;i++)  //輸出魔方陣
 {
   for(j=1;j<n+1;j++)
   {
    printf("%4d",magicsqr[i][j]);
   }
   printf("\n\n");
 }
 return;
}

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章