题目
如下图所示,小明用从1 开始的正整数“蛇形”填充无限大的矩阵。
容易看出矩阵第二行第二列中的数是5。请你计算矩阵中第20 行第20 列的数是多少?
以下程序实现了这一功能,请你补全以下空白处内容:
提示:
当到达边界时,判断它应该向右走还是向下走,向右走完就直接向左下走,向下走完就直接向右上走
#include <bits/stdc++.h>
using namespace std;
int main()
{
int i = 0;
int j = 0;
int cnt = 2;
int a[250][250];
a[0][0] = 1;
while (cnt < 1000)
{
j++;
while (i != -1 && j != -1)
{
a[i][j] = cnt++;
if (j == 0)
break;
i++;
j--;
}
i++;
while (i != -1 && j != -1)
{
___________;
}
}
for (int i = 0; i < 20; i++)
{
for (int j = 0; j < 20; j++)
{
cout << setw(5) << a[i][j] << ' ';
}
cout << '\n';
}
cout << a[19][19];
return 0;
}
- 空白处代码应为:
a[i][j] = cnt++;
if (i == 0)
break;
i--;
j++;
问题分析
1.初始值的设定,最开始的坐标a[0][0]=1(及坐标值cnt=2),坐标的一个范围(cnt<1000);
2.条件判断:
(1)如果坐标值超过了一个范围将会结束(循环语句);
(2)向右上移动的条件(循环语句),坐标X与Y都不能小于0,此时X坐标最大,Y坐标为0,再向下移动一步后向右上方移动,X和Y的变化规律为,a[x][y] = cnt++,X–,Y++。直到X=0;
(3)向左下移动的条件(循环语句),坐标X和Y都不能小于0,此时Y坐标最大,X坐标为0,再向右移动一步了向左下方移动,X和Y的变化规律是,a[x][y] = cnt++,X++,Y–。直到Y=0。
代码实现
#include <iostream>
using namespace std;
int main()
{
//思路:
//1.初始值设定
int i = 0, j = 0;
int a[250][250];
a[0][0] = 1;
int cnt = 2;
//2.条件判断,以及变化规律
while (cnt < 2000)
{
j++;
while (i != -1 && j != -1)
{
a[i][j] = cnt++;
if (j == 0)
{
break;
}
//cnt++; //这样会出现错误,会出现坐标值有时不变的情况
i++;
j--;
}
i++;
while (i != -1 && j != -1)
{
a[i][j] = cnt++;
if (i == 0)
{
break;
}
//cnt++;
i--;
j++;
}
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
cout << a[i][j] << '\t';
}
cout << '\n';
}
cout << a[19][19] << endl;
return 0;
system("pause");
return 0;
}
- 输出结果
1 2 6 7 15
3 5 8 14 17
4 9 13 18 26
10 12 19 25 32
11 20 24 33 41
761
请按任意键继续. . .