📄 潘薛1061301109.cpp
字号:
#include<iostream.h>
#include<iomanip.h>
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++)
for(j=0;j<2*n-1;j++)
a[i][j]=0;
while(p<2*n-1)
{
{
for(i=p;i>=p+1-n;i--)
for(j=q;j<q+n;j++)
if(i+j==t)
{
a[i][j]=s;
s++;
}
}
t+=2;
q++;
p++;
}
for(i=0;i<2*n-1;i++)
for(j=0;j<2*n-1;j++)
{
if(i<(n-1)/2&&a[i][j]!=0)
{
a[i+n][j]=a[i][j];
}
else if(i>=(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;i<n;i++)
for(j=0;j<n;j++)
{
b[i][j]=a[i+(n-1)/2][j+(n-1)/2];
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cout<<setw(3)<<b[i][j]<<" ";
cout<<endl;
}
}
void f1(int n)
{
int a[100][100];
int i,j,t;
t=(n-1)/4;
int x,k=1,m=3;
if(t==0)
{
for(i=0;i<=m;i++)
for(j=0;j<=m;j++)
{
a[i][j]=k;k++;
}
for(i=1;i<=2;i++)
{
x=a[0][i];a[0][i]=a[m][m-i];a[m][m-i]=x;
x=a[i][0];a[i][0]=a[m-i][m];a[m-i][m]=x;
}
for(i=0;i<=m;i++)
{
for(j=0;j<=m;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}goto loop;
}
for(i=0;i<8;i++)
for(j=0;j<8;j++)
a[i][j]=0;
if(n%4==0&&n/4>1)
{
for(i=0;i<2;i++)
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<n;i++)
for(j=n/2;j<n;j++)
a[i][j]=a[i][n-1-j];
for(i=n/2;i<n;i++)
for(j=0;j<n;j++)
a[i][j]=a[n-1-i][j];
t--;
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(a[i][j]==0)
a[i][j]=n*i+j+1;
for(i=n-1;i>=0;i--)
for(j=n-1;j>=0;j--)
if(a[i][j]==1)
a[i][j]=n*n-n*i-j;
for(i=0;i<n;i++){
for(j=0;j<n;j++)
cout<<setw(3)<<a[i][j]<<" ";
cout<<endl;
}
loop:;
}
void danou(int n)
{
int p=n-1,q=0,s=1,i,j,t=n-1,v=n/2*n/2;
int a[50][50],b[50][50],c[50][50],d[50][50],e[100][100];
int m=(n-2)/4;
for(i=0;i<n/2;i++)
for(j=0;j<n/2;j++)
a[i][j]=0;
int x,y;
int max;
int mid;
max=(n/2)*(n/2);
mid=(n/2)/2;
x=n/2-1;
y=mid+1;
for(i=0;i<n/2;i++)
for(j=0;j<n/2;j++)
a[i][j]=0;
a[0][mid]=1;
for(i=2;i<=max;i++)
{
if(x<0&&y>n/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;i++)
for(j=0;j<n/2;j++)
b[i][j]=a[i][j]+2*v;
for(i=0;i<n/2;i++)
for(j=0;j<n/2;j++)
c[i][j]=a[i][j]+v;
for(i=0;i<n/2;i++)
for(j=0;j<n/2;j++)
d[i][j]=a[i][j]+3*v;
int temp;
for(i=0;i<=n/2-1;i++)
for(j=0;j<m;j++)
{
temp=a[i][j];
a[i][j]=d[i][j] ;
d[i][j]=temp;
}
temp=a[(n-2)/4][0];
a[(n-2)/4][0]=d[(n-2)/4][0];
d[(n-2)/4][0]=temp;
temp=a[(n-2)/4][m];
a[(n-2)/4][m]=d[(n-2)/4][m];
d[(n-2)/4][m]=temp;
for(i=0;i<=n/2-1;i++)
for(j=n/2-1;j>(n-2)/4+1;j--)
{
temp=b[i][j];
b[i][j]=c[i][j];
c[i][j]=temp;
}
for(i=0;i<n/2;i++)
for(j=0;j<n/2;j++)
e[i][j]=a[i][j];
for(i=0;i<n;i++)
for(j=n/2;j<n;j++)
e[i][j]=b[i][j-n/2];
for(i=n/2;i<n;i++)
for(j=0;j<n/2;j++)
e[i][j]=d[i-n/2][j];
for(i=n/2;i<n;i++)
for(j=n/2;j<n;j++)
e[i][j]=c[i-n/2][j-n/2];
for(i=0;i<n;i++){
for(j=0;j<n;j++)
cout<<setw(3)<<e[i][j]<<" ";
cout<<endl;
}
}
void main()
{
bool f=true;
while(f)
{
int n;
cout<<" 幻方制作"<<endl;
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
cout<<" 1.奇数阶幻方"<<endl;
cout<<" 2.偶数阶幻方"<<endl;
cout<<"请输入相应的数字(1或2)选择相应的菜单0:退出"<<endl;
int k;
cin>>k;
switch(k)
{
case 1:
cout<<"请输入奇数n(2<n<=10)"<<endl;
cin>>n;
if(n<3||n>10)
cout<<"对不起,您的输入有误,请重新来过!"<<endl;
jishu(n);
break;
case 2:
cout<<"请输入需要的偶数n(2<n<=10)"<<endl;
cin>>n;
if(n<3||n>10)
cout<<"对不起,您的输入有误,请重新来过!"<<endl;
else{
if(n%2==1&&n<=10&&n>2)
jishu(n);
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<<"查无此号"<<endl;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -