目录
题目:
题目描述:
题目链接:
思路:
思路详解:
看图找规律,容易发现,数字按照:向右一步->向左下直到边界->向下一步->向右上直到边界。用二维数组表示点的坐标,用i表示第i行,用j表示第j列。走一步的直接写即可(i++表示向下一步,j++表示向右一步),走到边界的用while加上判断边界的条件即可
注意判断边界还存在规律,草稿纸找到的规律:找第n行n列,i,j需要遍历到2*n-1,找a[20][20]即找第20行20列,i,j需要遍历到39,如果i,j设的数<39输出结果为0,草稿纸如下图所示:
代码:
代码详解:
#include<bits/stdc++.h> //填空题,答案是761
using namespace std; //容易发现,数字按照:向右一步->向左下直到边界->向下一步->向右上直到边界
//走一步的直接写即可,走到边界的用while加上判断边界的条件即可
int a[1000][1000]; //多开一点,防止数组越界
int main()
{
a[1][1]=1;
int temp=1;
for(int i=1,j=1;i<=40&&j<=40;) //由草稿纸找到的规律:找第n行n列,i,j需要遍历到2*n-1,找a[20][20]
{ //即找第20行20列,i,j需要遍历到39,如果i,j设的数<39输出结果为0
j++; //表示向右一步
temp++;
a[i][j]=temp;
while(j!=1) //向左下直到边界,边界的条件就是走到第一列,即j==1
{
i++;
j--;
temp++;
a[i][j]=temp;
}
i++; //表示向下一步
temp++;
a[i][j]=temp;
while(i!=1) //向右上直到边界,边界的条件就是走到第一行,即i==1
{
i--;
j++;
temp++;
a[i][j]=temp;
}
}
cout<<a[20][20]<<endl;
return 0;
}