说实话我也不想从这么简单的题开始
但是我也是真不会哈哈哈哈
慢慢来吧
走方格问题
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;
}
哎呀 也不知道能写多久 还要考研。
总之就是加油啦~