二维数组应用举例
矩阵
#include<stdio.h>
int main()
{
int n;
int a[100][100];
printf("请输入 n*n 矩阵的 n:\n");
scanf("%d", &n);
printf("请输入矩阵(n*n):\n");
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
scanf("%d",&a[i][j]);
}
}
printf("矩阵(n*n)\n");
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
矩阵为二维数组的简单应用,在这个例题中,i代表行,j代表列
螺旋方阵
#include<stdio.h>
int main()
{
int a[100][100] = {0};
int n;
int line = 0, row = 0, direction = 0;//line是行,row是列。
scanf("%d", &n);
for(int i = 1; i <= n * n; i++)
{
a[line][row] = i;
if(direction == 0)
{
if(row + 1 >= n || a[line][row + 1] != 0)
{
direction = 1;
line++;
}
else
{
row++;
}
}
else if(direction == 1)
{
if(line + 1 >= n || a[line + 1][row] != 0)
{
direction = 2;
row--;
}
else
{
line++;
}
}
else if(direction == 2)
{
if(row - 1 < 0 || a[line][row - 1] != 0)
{
direction = 3;
line--;
}
else
{
row--;
}
}
else if(direction == 3)
{
if(line - 1 < 0 || a[line - 1][row] != 0)
{
direction = 0;
row++;
}
else
{
line--;
}
}
}
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
printf("%3d ", a[i][j]);
}
printf("\n");
}
return 0;
}
螺旋方阵的思路:
line代表行,row代表列,同时定义了一个方向direction。
if(direction == 0)
{
if(row + 1 >= n || a[line][row + 1] != 0)
{
direction = 1;
line++;
}
else
{
row++;
}
}
在这段代码中direction = 0 意味着方向是向右的
if(row + 1 >= n || a[line][row + 1] > 0)
这个代表如果列数超过你所规定的n,或者这一行下一个位置不等于0(初始化让数组的所所有位置都为0)那么就改变方向,direction = 1,方向向下,否则,继续在这一行赋值,直至改变方向的时候。
以下与这个原理相同。