⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 潘薛1061301109.cpp

📁 幻方的操作
💻 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 + -