丢失的牛(简单)

农夫约翰在寻找丢失的奶牛贝茜时,遇到一个数学问题,即如何在一条数轴上的未知位置找到奶牛。他采用了一种“之字形”搜索策略,每次移动的距离是上一次的两倍。尽管最坏情况下可能需要行走9倍于直接距离的路程,但这是最佳策略。代码实现展示了如何根据这种策略计算总行进距离。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

丢失的牛

题目

农夫约翰丢掉了他最宝贵的奶牛贝茜,他需要找到她!

幸运的是,农场只有一条长长的小路,约翰知道贝茜一定在这条小路上的某个地方。

如果我们将这条路看作一个数轴,那么约翰当前位于位置 x,贝茜当前位于位置 y(约翰不知道其具体位置)。

如果约翰知道贝茜所处的具体位置,那么只需直接朝她走去,找到她只需行进 |x−y| 的距离。

不幸的是,外面很黑,农夫约翰什么也看不见。

他找到贝茜的唯一办法就是来回走动,直到他最终到达她的位置。

为了找出在搜索过程中来回走动的最佳策略,约翰查阅了计算机科学研究文献,发现这个确切的问题不仅在过去被计算机科学家研究过,而且它实际上被称为“丢失的奶牛问题”(这是真的!)。

农民约翰找到贝茜的推荐行动方式是首先移动到位置 x+1,然后反向移动到位置 x−2,然后移动到位置 x+4,依此类推,以“之字形”模式,每一次移动到的位置与初始位置之间的距离都是上一次移动到的位置与初始位置之间的距离的两倍。

正如他在研究解决丢失奶牛问题的算法时了解到的那样,这种方法保证了在最坏的情况下,找到贝茜之前,他需要行进 9 倍于他与贝茜之间的直接距离的路程。(事实上,相比于其他策略的最坏情况,9 倍于实际距离已经是最好的了)

农夫约翰很想验证这个结果。

给定 x 和 y,请根据上面的“之字形”搜索策略计算直到找到贝茜为止,他将要行进的总距离是多少。

输入格式

共一行,包含两个整数 x,y。

输出格式

输出一个整数,表示总行进距离。

数据范围

0≤x,y≤1000

输入样例:
3 6
输出样例:
9
思路

在这里插入图片描述

AC代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;

int main()
{
	int x,y;
	cin>>x>>y;
	
	int res=0,step=1,last=x;//res表示一共走多远,step表示当前这一次距离x的步长是多少,last表示起点的位置
	while(true)
	{
		int next=x+step;
		if(last<=y&&y<=next||next<=y&&y<=last)//第一种是last在左,next在右;第二种是last在右,next在左 
		{
			res+=abs(y-last);//当前这次走过的长度+从last走到y的距离 
			break;
		} 
		
		res+=abs(next-last);
		last=next;
		step*=-2;
	} 
	
	cout<<res<<endl;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值