6. 矩阵中填数. 当给出 N*N 的矩阵,要求用程序填入下列形式的数:
① 倒填,例如N=5 ② 蛇形填数 ③ 回转填数
#include <iostream>
#include <stdio.h>
using namespace std;
void Inversion(int n)
{
if (n == 1)
{
printf("1");
}
int **shouList = new int*[n];
for (int i = 0; i < n; i++)
shouList[i] = new int[n];
int max = n*n;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
shouList[i][j] = max;
max--;
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf("%4d", shouList[i][j]);
}
printf("\n");
}
printf("\n");
}
void Snake(int n)
{
if (n == 1)
{
printf("1");
}
int **shouList = new int*[n];
for (int i = 0; i < n; i++)
shouList[i] = new int[n];
int row = 0, col = 0;
int Filler = 1;
int loop = 0;
for (size_t loop = 0; loop < 2*n-1; loop++)
{
row = (loop < n) ? 0 : loop - (n - 1);
col = (loop < n) ? loop : (n - 1);
for (int j = row; j <= col; j++)
(loop % 2) ? (shouList[j][loop - j] = Filler++) : (shouList[loop - j][j] = Filler++);
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf("%4d", shouList[i][j]);
}
printf("\n");
}
printf("\n");
}
void Rotation(int n)
{
if (n == 1)
{
printf("1");
}
int **shouList = new int*[n];
for (int i = 0; i < n; i++)
shouList[i] = new int[n];
int Filler = 1;
int head = 0, tail = n-1;
int row = 0, col = 0;
for (int i = 0; i <= n / 2; i++)
{
if (head == tail)
{
shouList[head][tail] = Filler;
}
for (row = head; row < tail; row++)
{
shouList[row][col] = Filler++;
}
for (col = head; col < tail; col++)
{
shouList[row][col] = Filler++;
}
for (row = tail; row > head; row--)
{
shouList[row][col] = Filler++;
}
for (col = tail; col> head; col--)
{
shouList[row][col] = Filler++;
}
head++;
tail--;
row = head;
col = head;
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf("%4d", shouList[i][j]);
}
printf("\n");
}
printf("\n");
}
int main()
{
int n = 0,choose = 0;
cout << "Please input the dimension you want to Constructing the Matrix :" << endl;
cin >> n;
cout << "Please choose the Matrix:" << endl;
cout << "1. Inversion ;" << endl;
cout << "2. Snake ;" << endl;
cout << "3. Rotation ;" << endl;
cin >> choose;
switch (choose)
{
case 1:
Inversion(n);
break;
case 2:
Snake(n);
break;
case 3:
Rotation(n);
break;
default:
cout << "Error!" << endl;
break;
}
system("pause");
return 0;
}