http://119.23.35.203/oj/contest/194/problems/1
题目理解后,理清思维便很好做,简单的模拟题,不熟悉的可以用数轴画出下图帮助理解
做法有多种,下面的代码是通过设置无线while循环,分左右两个方向满足条件即跳出的做法:
#include<cstdio>
#include<cmath>
using namespace std;
int fam,cow,dis,tot;
bool dir;
int main()
{
scanf("%d %d",&fam,&cow);
dis=1;tot=0;dir=1; //dis fam离最初起点的距离;tot fam走过的总距离;dir 0,1分别代表左右方向
while(1) //无限循环 在循环中设置条件跳出
{
if(dir==1) //方向为右时
{
if((fam+dis>=cow) && (fam<cow)) //如果当前这步就能到达或超过牛
{
tot+=abs(fam-cow);
printf("%d",tot); //加上当步到牛的距离 输出
break;
}
dir=0; //转变方向
}
else
{
if((fam-dis<=cow) && (fam>cow)) //同上
{
tot+=abs(fam-cow);
printf("%d",tot);
break;
}
dir=1; //转变方向
}
tot+=dis*2; // 每次fam都回到最初起点,tot距离增加dis*2
dis*=2; //重新从起点出发,此时dis倍增
}
return 0;
}
完成~