找贝壳

题目描述

牛牛和妞妞去海边捡了一大袋美丽的贝壳,千辛万苦地运回家后,牛牛和妞妞打算分掉这些贝壳。
牛牛提出,他和妞妞轮流从还没有分配的贝壳中取一定数量的贝壳,直到贝壳分完为止。分配规则是牛牛每次取剩余贝壳的1/10(向下取整),妞妞每次固定取m个贝壳,妞妞先取。
妞妞想要得到不少于一半的贝壳,又不想太过分,那么她一次最少取多少个贝壳才能得到不少于一半的贝壳呢?

输入描述:

一个正整数n,表示贝壳的总数量,1<=n<=1000000000000000000。

输出描述:

一个正整数m,表示妞妞一次最少取的贝壳数量。

输入例子1:

10

输出例子1:

1

输入例子2:

70

输出例子2:

3

题解

采用二分法遍历从1到n的序列



import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        long n = in.nextLong();
        long start = 1,end = n;
        long flag = 1;
        while (start < end){
            long middle = (start + end) / 2;
            if (panduan(middle,n)){
                flag = middle;
                end = middle;
            }else {
                start = middle + 1;
            }
        }
        System.out.println(flag);
    }

    public static boolean panduan(long m,long n){
        long sum = 0;
        long x = n;
        while (n >= 0){
            if (n > m) {
                sum += m;
                n -= m;
                n -= n / 10;
            }else {
                sum += n;
                n = -1;
            }
        }
        long middle = 0;
        if (x % 2 == 0){
            middle = x / 2;
        }else {
            middle = (x + 1) / 2;
        }
        return sum >= middle ? true : false;
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值