45分,剩下的全部运行时错误了
查看原帖
45分,剩下的全部运行时错误了
749028
QAQ5楼主2025/1/2 11:00
import java.math.BigDecimal;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        //面向过程简单点
        int s, x;
        Scanner scanner = new Scanner(System.in);
        s = scanner.nextInt();
        x = scanner.nextInt();
        BigDecimal current = new BigDecimal(0);//如果范围左边是1,当前在1.1不也是范围内,不考虑复杂的性能优化直接用小数,这个还能复杂优化吗
        BigDecimal swimDistance = new BigDecimal(7), decay = new BigDecimal("0.98"/*虽然是字符串但也不能直接写98%*/)/*为了不重复计算,还要回到这里加,不顺畅了咋办*/;
        //先游到范围内,如果直接游过了呢
        //有些值每次都重新计算了,但也不好解决啊
        /*有时候这样最好吗*/
        while (!in(current, s, x)) {
            if (out(current, s, x)) {
                System.out.println('n');
                return;
            }
            current = current.add(swimDistance);
            swimDistance = swimDistance.multiply(decay);//衰减98%
        }
        if (out(current.add(swimDistance), s, x/*不加后面两个会不会不利于观察*/)) System.out.println('n');
        else System.out.println('y');
    }

    static boolean out(BigDecimal current, int pos, int range) {
        int right = pos + range;
        return current.compareTo(BigDecimal.valueOf(right)) > 0;
    }

    static boolean in(BigDecimal current, int pos, int range) {
        //范围是半径范围
        int left = pos - range, right = pos + range;
        return current.compareTo(BigDecimal.valueOf(left)) >= 0 && current.compareTo(BigDecimal.valueOf(right)) <= 0;
    }
}
2025/1/2 11:00
加载中...