前言
一、题目描述
如下图所示,小明用从 11 开始的正整数“蛇形”填充无限大的矩阵。
1 2 6 7 15 ...
3 5 8 14 ...
4 9 13 ...
10 12 ...
11 ...
...
容易看出矩阵第二行第二列中的数是 5。请你计算矩阵中第 20 行第 20 列的数是多少?
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
二、思路
按照题目的要求,当行数到达第一行后,下一个数将会向右走,然后再向斜下方走,相同的,到达第一列时,下一个数将会向下走,然后再向斜上方走。按照这个规律,构建矩阵并逐一赋值即可求得第20行第20列的值
最终答案:761
三、代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int juzhen[100][100];
int max_num=50*50; //总共要填充50*50个数
int count=1; //统计填充的个数
int i=1;
int j=1;
int up=1; //up=0表示接下来要往右下方走,up=1表示接下来要往右上方走
while(count<=max_num)
{
juzhen[i][j]=count; //填充
if(i==1&&up==1) //表示在第一行,要往右走
{
j++;
up=0; //接下来要往右下方走
}
else if(j==1&&up==0) //表示在第一列,接下来要往下走
{
i++;
up=1; //接下来要往右上方走
}
else if(up==1)
{
i--;
j++;
}
else if(up==0)
{
i++;
j--;
}
count++;
}
cout<<juzhen[20][20]<<endl;
return 0;
}