大宝自习室whuhbj.blog.chinaunix.net
hbj_2008
全部博文(69)
2013年(6)
2012年(16)
2011年(18)
2010年(29)
athsonxy
athzhany
shanggua
haiyangc
riverbir
lemon_su
zhoujk05
jack7152
小雅贝贝
56576391
zhtqyn
炮雷子
pzk_孔雀
sunny360
dannyxia
zaijieju
lv_bin98
EN_LIJ
分类: C/C++
2010-08-02 23:34:10
#include<iostream> #include<cstdlib> #define max 502 int array[max][max]={0}; int a[max][max] = {0} ; using namespace std ; void lun(int i , int n ) { for(int j=1;j<n;j++) array[i][j]=array[i-1][j-1]; array[i][0]=array[i-1][n-1]; } void swap(int i , int k,int t) { int temp ; temp = a[i][k]; a[i][k]=a[i+t][k]; a[i+t][k]=temp ; } void setshun(int p , int q , int n) { int temp = n*n + 1 ; for(int i=0;i<4;i++) { a[p-i][q+i]=temp - a[p-i][q+i]; a[p-3+i][q+i]=temp - a[p-3+i][q+i]; } } void quen(int n) //奇幻方 { for(int i=0;i<=(n-1)/2;i++) array[0][i]=(n+1)/2+i ; for(int i=(n+1)/2;i<n;i++) array[0][i]=i-(n-1)/2; for(int i=1;i<n;i++) lun(i,n); for(int i=0;i<n;i++) for(int j=0;j<n;j++) a[i][j]=(array[i][j]-1)*n+array[i][n-1-j]; } void dduen(int n) //双偶幻方 { int k =1 ; for(int i=0;i<n;i++) for(int j=0;j<n;j++) a[i][j]= k ++ ; int flag = n/4 ; for(int i= 1 ; i<=flag ;i++) for(int j=0;j<flag;j++) setshun(4*i-1,4*j,n) ; } void duen(int n) //单偶幻方 { int t = n/2 ; quen(t); //求A部分 int s = t*t ; int * p = new int[t] ; for(int i=0;i<t;i++) //*p的初始化 p[i]=0; p[(t-1)/2]= (t-1)/2 ; int flag = (n-2)/4 ; for(int i=0;i<t;i++) for(int j=0;j<t;j++) { //A a[i][j+t]=a[i][j]+s*2 ; //B a[i+t][j]=a[i][j]+s*3 ; //C a[i+t][j+t]=a[i][j]+ s ; //D } for(int i=0;i<t;i++) //A,C象限交换 for(int u=0;u<flag;u++) swap(i,p[i]+u,t); for(int i=t+(t-1)/2 ; i<t+(t-1)/2+flag-1;i++) //B,D象限交换列 for(int j=0;j<t;j++) swap(j,i,t); } int main() { int number ; cin>>number ; int * p = new int[2*number+2]; if(number%2!=0&&number>2) quen(number); else if(number%4==0&&number>2) dduen(number); else if((number%4!=0&&number%2==0)&&number>2) duen(number); for(int i=0;i<number;i++) for(int j=0;j<number;j++) { cout<<a[i][j]<<" "; if(j==number-1)cout<<endl; } system("pause"); return 0 ; }
上一篇:xmu1030 月老的难题
下一篇:xmu1030月老的难题
登录 注册