题意翻译
题目描述:在一坐标轴上给出n块板子,每个板子所占的空间为[(k-1)m,(k-1)m+l](l<m),一个青蛙从原点0起跳,每次跳d距离远,问最后青蛙会落在哪里(没落在板子上就结束跳跃) 输入:一行四个整数n,d,m,l 输出:一个整数,即青蛙最后的落点 1<=n,d,m,l<=10^6 l<m
输入格式
第一个输入行包含 4 个整数nn,dd,mm,ll ( 1<=n,d,m,l<=10^{6},l<m1<=n,d,m,l<=106,l<m) — 分别:平台数量、蚱蜢 Bob 跳跃的长度和数字mm和ll需要查找的坐标kk-第四个平台:[(k-1)米,(k-1)米+升][(k−1)m,(k−1)米+l].
输出格式
输出点的坐标,粗心跳汰机将落在该点的位置。不要忘记,如果鲍勃发现自己在平台边缘,他不会摔倒。
输入输出样例
输入 #1复制
2 2 5 3
输出 #1复制
4
输入 #2复制
5 4 11 8
输出 #2复制
20
思路分析:
这道题的意思就是说判断青蛙的位置是否在木板上,如果不在的话,就输出上一个落点的位置,如果在的话,就让青蛙跳出当前木板,这里采用的方法是判断从起点到当前木板微端可以分成几个d(青蛙单次跳的距离),然后在在最后一次加上d就行了。例如木板尾端距离为7,d为3,此时可以分为2个d,最后一次的位置是6,然后加上d就是9,所以青蛙会跳到9。
#include<stdio.h>
long long n,m,d,l,distance=0;//distance为青蛙当前的位置,从0开始
int main()
{
scanf("%lld %lld %lld %lld",&n,&d,&m,&l);
for(long long k=1;k<=n;k++)//从第一块木板开始循环
{
if(distance<(k-1)*m)//如果青蛙当前位置小于当前木板的前端的话,证明青蛙不在当前木板上
break;//所以直接跳出
if(distance<=(k-1)*m+l)//如果青蛙当前位置小于当前木板的末端的话,证明青蛙在当前木板上
distance=((k-1)*m+l)/d*d+d;//所以将青蛙的位置移到刚好跳出木板
}
printf("%lld",distance);//输出青蛙的上一个落点位置
return 0;
}