Question:
Result: 761
Solve:
纯纯的模拟题
从右上角到左下角,再从左下角到右上角,cnt记录要填的数,数组里存的数字表示该位置应该填的数,u代表横坐标,d代表纵坐标
横坐标降为1时,填完数后纵坐标加一;
纵坐标降为1时,填完数后横坐标加一;
提醒一点:求的是第20行第20列,这可不是20*20的格子数就可以模拟完的,数组得开大点
Code:
不开数组,直接写成死循环,在u和d变动的时候判断u和d是否等于20,是的话就输出cnt,这样写也OK,只不过判断的次数更多了
#include <bits/stdc++.h>
using namespace std;
//坐标系建立与数学相同
//向右为x轴正方向,向下为y轴正方向
int main()
{
//初始化
int cnt = 0, x = 1, y = 1;
int a[100][100];
memset(a,0,sizeof(a));
//1 1 = 1
a[x][y] = ++cnt;
while(!a[20][20])
{
x++;
//右上角到左下角填数
while(x != 1){
a[x--][y++] = ++cnt;
}
a[x][y] = ++cnt;
y++;
//左下角到右上角填数
while(y != 1){
a[x++][y--] = ++cnt;
}
a[x][y] = ++cnt;
}
cout <<a[20][20];
return 0;
}
声明:图片均来源于蓝桥杯官网,以个人刷题整理为目的,如若侵权,请联系删除~