- 注册时间
- 2012-3-12
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 265
- 在线时间
- 小时
|
发表于 2012-3-12 21:02:26
|
显示全部楼层
以前看了个生成幻方的程序,不知道谁写的,在给大家看一下(c++的)
#include
#include
#include
void jishu(int n) //任意奇数阶幻方制作的函数(阶梯法)
{
int p=n-1,q=0,s=1,i,j,t=n-1;
int b[50][50];
int a[100][100];
for(i=0;i<2*n-1;i++) //给数组a赋初值
for(j=0;j<2*n-1;j++)
a[i][j]=0;
while(p<2*n-1) //从a的中间起向下运动一直到最后
{
{
for(i=p;i>=p+1-n;i--) //根据行的变换,列数每次右移五格
for(j=q;j=(3*n-1)/2&&a[i][j]!=0) //格子下方的数填入数组中
{
a[i-n][j]=a[i][j];
}
else if(j<(n-1)/2&&a[i][j]!=0) //格子左方的数填入数组中
{
a[i][j+n]=a[i][j];
}
else if(j>=(3*n-1)/2&&a[i][j]!=0) //格子右方的数填入数组中
{
a[i][j-n]=a[i][j];
}
}
for(i=0;i1)
{
for(i=0;i<2;i++) //取左上角四个格子把主对角线上的元素赋值为1
for(j=0;j<2;j++)
{
if(i==j)
a[i][j]=1;
}
}
while(t>0)
{
for(i=0;i<2;i++) //水平复制刚才的四格
for(j=2;j<4;j++)
a[i][j]=a[i][j-2];
for(i=2;i<4;i++) //将上述八格水平翻转
for(j=0;j<4;j++)
a[i][j]=a[3-i][j];
for(i=0;i=0;i--) //从右下角起,给值为1的元素重新赋值,值为n*n-n*i-j
for(j=n-1;j>=0;j--)
if(a[i][j]==1)
a[i][j]=n*n-n*i-j;
for(i=0;in/2-1)
{
x=0;y=n/2-1;x=x+1; //在最右上角超出
}
if(x<0)
{
x=n/2-1; //在上方超出
}
if(y>n/2-1) //在右方超出
{
y=0;
}
if(a[x][y]!=0)
{
x=x+2;y=y-1; //在右上角有数字
}
a[x][y]=i; //正常附值
x=x-1; //正常附值
y=y+1; //正常附值
}
for(i=0;i(n-2)/4+1;j--)
{
temp=b[i][j];
b[i][j]=c[i][j];
c[i][j]=temp;
}
for(i=0;i>k;
//int k;
// cin>>k;
switch(k)
{
case 1:
cout<<"请输入奇数n(2>n;
if(n<3||n>=10||n%2==0)
{
do{
cout<<"对不起,您的输入有误,请重新来过!"<>n;
}while(n>=3&&n<10&&n%2!=0);
}
else
jishu(n);
break;
case 2:
cout<<"请输入需要的偶数n(2>n;
if(n<3||n>10||n%2!=0)
{
do{
cout<<"对不起,您的输入有误,请重新来过!"<>n;
}while(n>3&&n<=10&&n%2==0);
}
else{
if(n%4==0)
f1(n);
else if(n%2==0&&n%4!=0)
danou(n);
}
break;
case 0:f=false;break;
default:
cout<<"查无此号"< |
-
-
幻方制作.txt
6.04 KB, 下载次数: 2, 下载积分: 金币 -1 枚, 经验 1 点, 下载 1 次
|