题目名称:小玉在游泳
时间限制:1000ms内存限制:256M
题目描述:
小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游2米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的98%。现在小玉想知道,如果要游到距离x米的地方,她需要游多少步呢。请你编程解决这个问题。
输入描述:
输入一个数字(不一定是整数,小于100m),表示要游的目标距离。
输出描述:
输出一个整数,表示小玉一共需要游多少步。
示例1:
输入: 4.3 输出 : 3
提示
无
思路:定义一个flag记录需要游泳的步数,第一次移动肯定是flag = 1;
定义两个float类型变量,step是单词游的长度,len是总共游的总长度,然后先排除掉输入的距离小于等于2的情况,这是因为只要移动,第一此就会移动2m,所以无论如何都会移动一步,返回flag = 1即可。
然后通过判断总长度和输入的长度的大小关系,当移动的总长度小于输入的总长度的时候,就需要进行移动,每次移动先判断单此移动的长度step,然后再判断移动的总长度len,然后只要执行一次,flag就加一,这样需要移动的总步数就计算出来了。
public static int solution(float distance){
// TODO: 请在此编写代码
int flag = 1;
float step = 2.0f,len = 2.0f; //step记录单次移动的长度,len记录总共游的长度
if(distance <= 2){
return flag;
}else{
while(len < distance){
step *= 0.98;
len += step;
flag += 1;
}
}
return flag;
}