问题遇到的现象和发生背景
小孙和小王在玩蛇形走位游戏:在一个n行m列的矩阵中,从左上角(0,0)开始,蛇形走位到右下角为(n-1,m-1)。
小孙问小王:如果我现在站在(x, y)位置上,你猜我一共走了多少步?
小王思考片刻便有了答案, 你是否已经也能迅速算出结果呢?
如下图所示,左图是3x4矩阵到每个点经过的步数,为了方便理解,(0,0)从1算起。右图是4x3矩阵的示例:
输入
输入包含多组数据,每组数据一行。
每一行输入四个整数n,m,x,y(n <= 2* 104, m <= 2*104, 0<= x < n, 0 <= y < m),分别代表矩阵的行数、矩阵的列数、询问点的行坐标、询问点的列坐标。
输出
每组数据输出一行,表示小孙经过了多少步到达了(x,y)这个位置。
样例输入 Copy
3 4 0 2
4 3 2 1
样例输出 Copy
6
8
今天做了道题目,感觉有点难,但是写了好久还是写了出来,测试了差不多能过了,在学校oj上交一下,好家伙,运行错误
问题相关代码,请勿粘贴截图
#include<stdio.h>
int a[21000][21000];
int main(void)
{
while(1)
{
int m,n,x,y,t = 1,o = 0,p = 0;
scanf("%d %d %d %d",&m,&n,&x,&y);
//o , m表示行,p,n表示列
a[o][p] = t;
while(1)
{
if(n > p + 1) a[o][++p] = ++t;
else
{
a[++o][p] = ++t;
}
if(o == m - 1 && p == n - 1)
break;
while(o < m - 1 && p > 0)
{
a[++o][--p] = ++t;
}
if(o == m - 1)
a[o][++p] = ++t;
else
a[++o][p] = ++t;
if(o == m - 1 && p == n - 1)
break;
while(o > 0 && p < n - 1)
a[--o][++p] = ++t;
}
printf("%d",a[x][y]);
}
return 0;
}
运行结果及报错内容
我的解答思路和尝试过的方法
试了将数组开大一点 但没有用