QUESTION:
/*
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
*/
void func(int n)
要求:通过传入的n,输出一个4*4的矩阵, 顺序如上图所示.
CODE:
//NXN矩阵
#include <iostream>
using namespace std;
#include <iomanip>
//#define MAXSIZE 4
//全局变量
int value;
void right(); //向左输入的赋值函数
void down();
void left();
void up();
void show(); //显示函数
void sort(); //控制方向的函数
int direction = 0; //控制方向
int rightNum = 0; //向左输入一行的次数
int downNum = 0;
int leftNum = 0;
int upNum = 0;
int arrayNum = 0; //自增赋值数
int row = 0; //保存行下标
int col =0; //保存列下标
int array[100][100]; //保存数组
int main()
{
cin>>value;
sort();
show();
return 0;
}
void sort()
{
//while(arrayNum <= value*value)
//{
while(arrayNum != value*value) //循环跳出条件,赋值完毕
{
switch(direction)
{
case 0:
right();
break;
case 1:
down();
break;
case 2:
left();
break;
case 3:
up();
break;
default:
break;
}
}
return;
}
void right()
{
int m = row;
int n = col;
if(m==0&&n==0)
{
array[m][n] = ++arrayNum;
}
for(int i=n+1; i<value-rightNum;i++)
{
array[m][i] = ++arrayNum;
n++;
}
row=m;
col=n;
rightNum++;
direction = 1;
return;
}
void down()
{
int m = row;
int n = col;
for(int i=m+1; i<value-downNum;i++)
{
array[i][n] = ++arrayNum;
m++;
}
row=m;
col=n;
downNum++;
direction = 2;
return;
}
void left()
{
int m = row;
int n = col;
for(int i=n-1; i>=leftNum;i--)
{
array[m][i] = ++arrayNum;
n--;
}
row=m;
col=n;
leftNum++;
direction = 3;
return;
}
void up()
{
int m = row;
int n = col;
for(int i=m-1; i>upNum; i--)
{
array[i][n] = ++arrayNum;
m--;
}
row=m;
col=n;
upNum++;
direction = 0;
return;
}
void show()
{
int n =0;
for(int i=0; i<value; i++)
{
for(int j=0; j<value; j++)
{
cout<<setw(value)<<array[i][j];
}
cout<<endl;
}
}