寻友之旅
小青要找小码去玩,他们的家在一条直线上,当前小青在地点 N ,小码在地点 K (0≤N , K≤100 000),并且小码在自己家原地不动等待小青。小青有两种交通方式可选:步行和公交。
步行:小青可以在一分钟内从任意节点 X 移动到节点 X-1 或 X+1
公交:小青可以在一分钟内从任意节点 X 移动到节点 2×X (公交不可以向后走)
题解
对于这一题,对于一些佬来说肯定很容易。应该就是双指针的一个题。
步行:小青可以在一分钟内从任意节点 X 移动到节点 X-1 或 X+1
公交:小青可以在一分钟内从任意节点 X 移动到节点 2×X (公交不可以向后走)
首先,步行。小青是向前一个站点,持续+1。同时的,也可以-1。(-1那样的话其实可以与公交进行搭配,比方:小青坐过站)
其次,公交。在坐公交的时候每分钟到站点的时候都是偶数。
思考
- 输入两个数值(小青,小码)
- 最快正常速度肯定是公交速度
- 但当小码家是为奇数时,坐公交应+1
但相对来说,公交坐过站相对来说,不会使得有最快速度。毕竟为偶数或者奇数(所以这一点我废除)- 再就是当小青家与小码家只有一站之隔的时候,走路肯定是最快的
代码思路
- 判定小码家是否为偶数,为偶数并且大于等于2站则坐公交
- 判定小码家是否为一站之隔,是的话则走路过去
- 判定小码家是否为奇数,为奇数并且大于等于2站则坐公交+1(步行)
代码
小码的家为偶数并且大于等于2站:
if(k % 2 == 0 && k >= 2){
for(int i = n;i < k ;i++){
g = i*2;
if(g >= k){
System.out.print("乘车时间:"+i);
break;
}
}
}
小码的间隔为一站之隔:
if(k + 1 == n || k - 1 == n){
for(int i = n;i <= k;i++){
b = i+1;
if(b >= k){
System.out.print("步行时间:"+b);
break;
}
}
}
}
小码家的间隔为奇数时:
if(k % 2 != 0 && k >= 2){
for(int i = n;i < k ;i++){
bg = i * 2;
if(bg >= k){
System.out.print("走路+乘车时间:"+bg/2);
break;
}
}
}