牛客网 Wannafly挑战赛17-走格子

链接:https://www.nowcoder.com/acm/contest/114/A
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

在平面上有n*n大小的正方形,定义正方形左下角坐标是(1,1),右下角坐标是(n,1)

现在A君在左下角,他的初始方向是向右,他要在正方形内走m步

当A君碰到边界或者已经走过的格子时,他便会逆时针转90°继续走,直到走完m步。
现在给你两个整数n和m,请算出走完m步后A君的坐标。


输入描述:

输入一行两个整数n和m。

输出描述:

输出一行两个数表示A君的坐标。


示例1

输入

复制
3 3

输出

复制
3 2


备注:

n<=1000,m<n*n


分析:

题意很容易读明白,关键是怎样控制行走的路线,我们可以知道是先从外围的左下角走到右下角,再从右下角走到右上角,再从右上角走到左上角,再从左上角走到左下角,然后再进入第二层这样循环。


#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;

int main()
{
   int n,m;
   scanf("%d %d",&n,&m);
   int q=1,x=1,y=1;///x,y表示当前走到的位置的坐标,q表示的是当前走的是第几圈
   while(m>=1)
   {
       if(y==q)///从左下角走到右下角
       {
           x++;
           m--;
           //printf("1:%d %d %d\n",x,y,m);
       }
       if(x==n&&m>0)///从右下角走到右上角
       {
           y++;
           m--;
           //printf("2:%d %d %d\n",x,y,m);
       }
       if(y==n&&m>0)///从右上角走到左上角
       {
           x--;
           m--;
           //printf("3:%d %d %d\n",x,y,m);
       }
       if(x==q&&y!=q&&m>0)/**从左上角走到左下角,但是y!=q,是因为当我们进入第二层的时候,
        再走一步就到(2,2)的位置了,而这时不应该向右走,而不能向下走,这里理解起来注意一下**/
       {
           y--;
           m--;
           //printf("4:%d %d %d\n",x,y,m);
       }
       if(x==q&&y==q+1)///这时候该进入下一层了
       {
           q++;
           n--;
           //printf("5:%d %d %d\n",x,y,m);
       }
   }
   printf("%d %d\n",x,y);
   return 0;
}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值