您的位置:首页 > 其它

幻方....

2015-11-11 20:49 459 查看
c语言上机。。。。

c写的幻方。

/*************************************************************************
> File Name: code/class/7.c
> Author: 111qqz
> Email: rkz2013@126.com
> Created Time: 2015年11月11日 星期三 19时31分50秒
************************************************************************/

#include<stdio.h>
#include <string.h>

int n;
int a[105][105];

void swap(int *a,int *b)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
int fix_x( int x,int k,int n)
{
if (k%2==1)
{
if (x==0)
return n;
else return x;
}
else
{
if (x==n)
return n+n;
else return x;
}
}
int fix_y ( int y,int k,int n)
{
if (k<3)
{
if (y==n+1)
return 1;
else return y;
}
else
{
if (y==2*n+1)
return n+1;
else return y;
}
//   if (y==n+1)
//   return 1;
//  else return y;
}
void print()
{
for ( int i = 1 ; i <= n ; i++)
{
for ( int j = 1 ; j <= n ; j++)
printf("%d  ",a[i][j]);

printf("\n");
}

}

void OddMagic(int n,int x,int y,int k) //k表示4中状态。。。。
{

int cur ;
if (k==1) cur = 1;
if (k==4) cur = n*n+1;
if (k==3) cur = n*n*2+1;
if (k==2) cur = n*n*3+1;
int cnt = 1;
while (cnt<=n*n)
{
a[x][y]=cur;
int prex = x;
int prey = y;
cur++;
cnt++;
x--;
y++;
x = fix_x(x,k,n);
y = fix_y(y,k,n);
if (a[x][y])
{
x = prex+1;
y = prey;
}

}

}
int main()
{
memset(a,sizeof(a),0);
scanf("%d",&n);
if (n%2==1)
{
int x = 1;
int y = n/2+1;
OddMagic(n,x,y,1);
}
else
{
if (n%4==0)
{
for ( int i = 1,num=1 ; i <= n ; i++)
for ( int j  = 1 ; j <= n  ; j++,num++)
a[i][j]=num;

for ( int i = 1 ; i <= n ; i++)
{
for ( int j = 1 ; j <= n ; j++)
{
if (i==j||i+j>=n+1) continue;
int tmp;
tmp = a[i][j];
a[i][j] = a[n+1-i][n+1-j];
a[n+1-i][n+1-j] = tmp;
}
}
}
else
{
int x = 1;
int y = n/4+1;
int hn = n/2;

OddMagic(hn,x,y,1);
OddMagic(hn,x+hn,y,2);
OddMagic(hn,x,y+hn,3);
OddMagic(hn,x+hn,y+hn,4);

int  m = n/4;
for ( int i = 1 ; i <= hn ;i++)
{
for ( int j = 1 ; j <= m ; j++)
{
int tmp;
if (i==m+1&&j==m)
{
tmp = a[m+1][m+1];
a[m+1][m+1] = a[m+1+hn][m+1];
a[m+1+hn][m+1] = tmp;
continue;

}
tmp = a[i][j];
a[i][j] = a[i+hn][j];
a[i+hn][j] = tmp;
//  swap(a[i][j],a[i+n][j]);
}
}

for ( int i = 1 ; i <= hn ; i++)
{
for ( int j = n ; j>=n-m+2 ; j--)
{
int tmp;
tmp = a[i][j];
a[i][j] = a[i+hn][j];
a[i+hn][j] = tmp;
}
}

}
}
print();

}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: