5.13 走方格

说实话我也不想从这么简单的题开始

但是我也是真不会哈哈哈哈

慢慢来吧

                                                                                                                                                                                    


走方格问题

Q:Bob和Alice有个约会,一大早Bob就从点(0,0)出发,前往约会地点(a,b)。Bob没有一点方向感,因此他每次都随机的向上下左右四个方向走一步。简而言之,如果Bob当前在(x,y),那么下一步他有可能到达(x+1,y), (x-1,y), (x,y+1), (x,y-1)。很显然,当他到达目的地的时候,已经很晚了,Alice早已离去。第二天,Alice质问Bob为什么放她鸽子,Bob说他昨天花了s步到达了约会地点。Alice怀疑Bob是不是说谎了。你能否帮她验证一下?

思路

输入数据(a,b,s)

输出数据(yes/no)

最短路径=|a+b|

首先如果s<|a+b|一定说谎了

然后,bob每走一步必然是在x或y上+1或-1,每一步都会影响总数的奇偶性,如果a+b是偶数,那么最后到达(a,b)的步数必定是偶数步。所以s%2==(a+b)%2是没说谎的条件。(这里|a+b|和a+b奇偶性相同不需要考虑绝对值)


我的代码

#include <iostream>
using namespace std;
int main()
{
	long long x,y,step;
	cin>>x>>y>>step;
  if(step%2==(x+y)%2&&step>=abs(x)+abs(y))
	cout<<"Yes"<<endl;
else
	cout<<"No"<<endl;
}

好开心呀第一次运行成功哈哈哈哈

我感觉我写的像小学生流水账

我看了其他人的代码

有几种不同的也贴在这里

function isTrue(a,b,step){

       if(step>=a+b && (step-a-b)&1==0){//这里是二进制按位与,判别奇偶性(我还理解了好久……)

              console.log('Yes');

        }else{

             console.log('No');

        }

}​
下面这个是我见得最短的了 用了一个选择框很cool哈哈哈
#include <iostream>
using namespace std;
int main()
{
	long long x,y,step;
	cin>>x>>y>>step;
	(step%2==(x+y)%2)&&step>=x+y?cout<<"Yes"<<endl:cout<<"No"<<endl;
	return 0;
}

哎呀 也不知道能写多久 还要考研。

总之就是加油啦~










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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值