C语言:奇数魔方阵的实现

1、奇数阶魔方阵

奇阶魔方阵的实现步骤:

(1)将“1”放在第一行的中间一列;

(2)从“2”开始直到n*n为止的各数依次按下列规则存放:每一个数存放的行比前一个数的行数减一,列数同样加1.

(3)如果上一个数的列数为1,则下一个数的行数为n(最后一行)

(4)当上一个数的列数为n时,下一个数的列数应为1,行数减1

(5)如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面

//6-7:奇数阶魔方阵:
//1、1放在第一行中间
//2、后面的数字放在当前数字的上一行、后一列
//3、如果当前位置已经有数据,则放在前一个数字的下一行同列,即行值+2,列值+1
/*
void MagicSquare()
{
#define ROW 3
	int arr[ROW][ROW] = {0};   //将魔方阵的各行各列初始化为0
	int currow = 0;            //当前行:目前为第0行
	int curcol = ROW/2;        //当前列:目前为第1列
	arr[currow][curcol] = 1;   //先将数字1放入第0行中间
	for(int i = 2;i <= ROW * ROW;i++)  //依次将后面的8个数字插入到魔方阵中
	{
		//currow = currow - 1;   //后面的数字放在当前数字的上一行、下一列
		//if(currow < 0)         //当上一个数字为第0行的时候,此时的上一行为第2行
		//{
		//	currow  = ROW - 1;
		//}
		currow = (currow - 1 + ROW) % ROW;  //上述过程的简洁写法
		curcol = (curcol + 1) % ROW;        //后面的数字是在当前数字的后一列
		
		
		if(arr[currow][curcol] != 0)        //如果当前位置已经有数据,则放在上一个数字的下一行同列,即行值+2,列值+1
		{
			//currow = (currow + 1 + 1) % ROW;
			//curcol = (curcol - 1 + ROW) % ROW;
			currow = (currow + 1 + 1)% ROW;
			curcol = (curcol - 1 + ROW) % ROW;
		}

		arr[currow][curcol] = i;
		
	}

	for(int i = 0;i < ROW;i++)
	{
		for(int j = 0;j < ROW;j++)
		{
			printf("%-3d",arr[i][j]);
		}
		printf("\n");
	}
}

int main()
{
    MagicSquare();
    return 0;
}

 


版权声明:本文为yy_0733原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。