牛客:寻宝题

该博客讨论了一个算法问题,小红需要在无限长的数轴上找到一个宝物,每天先向右走a单位,再向左走b单位。文章通过分析不同情况,如宝物位置正负、a与b的关系,给出了判断小红最快能在哪一天拿到宝物的算法。示例展示了不同输入和输出,包括无法拿到宝物的情况。

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

在一个无限长的数轴上,某一处坐标上面有一个宝物。

小红想拿到这个宝物,她会从原点出发,她每天先向右走的长度,然后再向左走的长度,然后第二天再继续右走。

如果小红在移动的过程中路过这个宝物,小红就能捡起这个宝物。
小红想知道,自己最快能在哪一天拿到这个宝物?

输入描述:

三个整数,依次表示宝物的坐标K,小红每天向右走的长度a,每天向左走的长度b。

输出描述:

如果小红永远拿不到宝物,则输出 -1。
否则输出小红最快拿到宝物的天数。

示例1

输入

复制2 1 1

2 1 1

输出

复制-1

-1

说明

每天向右走 1 ,再向左走 1 ,永远走不到 2

示例2

输入

复制2 2 1

2 2 1

输出

复制1

1

说明

第一天向右走 2 ,直接就拿到宝物了。

示例3

输入

复制3 2 1

3 2 1

输出

复制2

2

说明

小红第一天向右走到坐标2,然后再向左走到坐标1,第二天向右直接来到坐标3拿到宝物。

分两种情况考虑,k<0,k>0;再在这两种情况中,分情况考虑a和b的关系,就可以了;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int k = sc.nextInt();
        int a = sc.nextInt();
        int b = sc.nextInt();
        System.out.println(getB(k, a, b));
    }

    private static int getB(int k,int a,int b) {
        boolean flag = true;
        int sum = 0;
        int count = 0;
        if (k>0){
            if (a==b||a<b){
                return -1;
            }else if (a>=k){
                return 1;
            }
            while (flag){
                sum = sum+a-b;
                count++;
                if (sum+a<k){

                }else{
                    count++;
                    flag=false;
                }

            }
            return count;
        }
        if(k<0){
            if (a==b||a>b){
                return -1;
            }else if (b-a>=-k){
                return 1;
            }
            while (flag){
                sum =sum+b-a;
                count++;
                if (sum<-k){

                }else {
                    flag = false;
                }
            }
            return count;

        }
        return  0;

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值