神奇矩阵-二维数组的应用

神奇矩阵:
| 2 | 9| 4 |
| 7 | 5 | 3 |
| 6 | 1 | 8 |
令矩阵的每行每列之和都为15:
解法:2, 4, 6, 8,这四个数,正好占据了矩形的四个角,我们采用填充方法将方格填完

填充规律:在第一行中间填1,然后1的右上角即为2的位置(行越界则移动到最后一行,2的右上角
即为3的位置,一直到碰到已填的数字为止)此时数字向下填,填好后将次序列进行如反转和镜像即完成。

#include<iostream>
using namespace std;
int a[3][3],b[3][3];

int main()
{	
	int i,tx,ty;
	int x=0,y=1;
	a[0][1]=1;//将1放在第0行第1列
	for(i=2;i<=9;i++)//依次放2->9
	{
		tx=(x+1)%3;
		ty=(y+1)%3;
		if(a[tx][ty]==0)//如果斜上未填数字
		{
			a[tx][ty]=i;//x为行,y为列
			x=tx;
			y=ty;
		}
		else//否则填数到下方
		{
			x=(x+1)%3;
			a[x][y]=i;
		}
	}
	for(i=0;i<=3;i++)
	{
		cout<<a[0][0]<<a[0][1]<<a[0][2]<<endl;
		cout<<a[1][0]<<a[1][1]<<a[1][2]<<endl;
		cout<<a[2][0]<<a[2][1]<<a[2][2]<<endl;
		cout<<endl;
		cout<<a[2][0]<<a[2][1]<<a[2][2]<<endl;//上下翻转
		cout<<a[1][0]<<a[1][1]<<a[1][2]<<endl;
		cout<<a[0][0]<<a[0][1]<<a[0][2]<<endl;
		cout<<endl;
	
	for(int ii=0;ii<3;ii++)//借助辅助数组b进行旋转
		for(int jj=0;jj<3;jj++)
			b[jj][2-ii]=a[ii][jj];
	for(int ii=0;ii<3;ii++)
		for(int jj=0;jj<3;jj++)
			a[ii][jj]=b[ii][jj];
	}
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43843978/article/details/88060647
今日推荐