zl程序教程

您现在的位置是:首页 >  其他

当前栏目

每日一题---蓝桥杯猴子吃包子问题Java解决

2023-03-14 22:43:48 时间

题目

资源限制

时间限制:1.0s 内存限制:256.0MB

问题描述

  从前,有一只吃包子很厉害的猴子,它可以吃无数个包子,但是,它吃不同的包子速度也不同;肉包每秒钟吃x个;韭菜包每秒钟吃y个;没有馅的包子每秒钟吃z个;现在有x1个肉包,y1个韭菜包,z1个没有馅的包子;问:猴子吃完这些包子要多久?结果保留p位小数。

输入格式

  输入1行,包含7个整数,分别表示吃不同包子的速度和不同包子的个数和保留的位数。

输出格式

  输出一行,包含1个实数,表示吃完所有包子的时间。

样例输入

4 3 2 20 30 15 2

样例输出

22.50

数据规模和约定

  0<x<100;0<y<100;0<z<100;0<x1<=1000000;0<y1<=10000000;0<z1<=10000000;0<p<=1000

分析

  • 就题上给的这个p的限制范围就大离谱,就算是double精度也就在小数点后六位,所以第一感觉就是这题不能用double做,BigDecima(一般用不到)就很好的解决了这一问题。
  • 但BigDecima是没有办法进行“+”“-”“*”“/”运算的,这就需要我们了解它的几个方法和一个技术
  • 方法:

  • BigDecima两对象相加

add(BigDecimal augend)

返回 BigDecimal ,其值是 (this + augend) ,其标为 max(this.scale(), augend.scale()) 。


  • BigDecima两对象相除

divide(BigDecimal divisor)

返回BigDecimal ,其值为(this / divisor) ,优先级为(this.scale() - divisor.scale()) ; 如果不能表示确切的商(因为它具有非终止的十进制扩展),则抛出一个ArithmeticException 。


  • BigDecima两对象相除余小数点后scale位,RoundingMode为采用的技术

divide(BigDecimal divisor, int scale, RoundingMode roundingMode)

返回一个 BigDecimal ,其值为 (this / divisor) ,其比例为指定。

  • 技术:
  • ROUND_HALF_DOWN
    四舍五入模式向“最近邻居”转弯,除非这两个邻居都是等距离的,在这种情况下,这是倒圆的。

代码

import java.math.BigDecimal;
import java.util.Scanner;
/**
 * @Author: Re
 * @Date: 2021/2/6 21:37
 */
public class Main {
    private static void chiTao(){
        Scanner scanner=new Scanner(System.in);
        BigDecimal a,b,c,d,e,f,sum;
        int g;
        a = scanner.nextBigDecimal();
        b = scanner.nextBigDecimal();
        c = scanner.nextBigDecimal();
        d = scanner.nextBigDecimal();
        e = scanner.nextBigDecimal();
        f = scanner.nextBigDecimal();
        g = scanner.nextInt();
        sum = d.divide(a,g,BigDecimal.ROUND_HALF_DOWN).add(e.divide(b,g,BigDecimal.ROUND_HALF_DOWN).add(f.divide(c,g,BigDecimal.ROUND_HALF_DOWN)));
        System.out.print(sum);
    }
    public static void main(String[] args) {
        chiTao();
    }
}