每日一题6.7

题目描述:

美团在吃喝玩乐等很多方面都给大家提供了便利。最近又增加了一项新业务:小象生鲜。这是新零售超市,你既可以在线下超市门店选购生鲜食品,也可以在手机App上下单,最快30分钟就配送到家。 

新店开张免不了大优惠。我们要在小象生鲜超市里采购n个物品,每个物品价格为ai,有一些物品可以选择八折优惠(称为特价优惠)。 
有m种满减优惠方式,满减优惠方式只有在所有物品都不选择特价优惠时才能使用,且最多只可以选择最多一款。 
每种满减优惠描述为(bi,ci),即满bi减ci(当消费>=bi时优惠ci)。 

求要买齐这n个物品(必须一单买齐),至少需要多少钱(保留两位小数)。

输入描述:

第一行,两个整数n,m。 
接下来n行,每行一个正整数ai,以及一个0/1表示是否可以选择特价优惠(1表示可以)。 
接下来m行,每行两个正整数bi,ci,描述一款满减优惠。

1 <= n,m <=10 
1 <= ai <= 100 
1 <= ci < bi <= 1000

输出描述:

一行一个实数,表示至少需要消耗的钱数(保留恰好两位小数)。

例1:

输入

2 1 
6 1 
10 1 
12 2

输出

12.80

例2:

输入

2 2 
6 1 
10 1 
5 1 
16 6

输出

10.00

思路:首先注意处理输入,因为题目给出的两个例子很好地解释了咱们需要的数据结构的形式,一个(n+m)*2的一个数组。然后因为n,m的限制,我们可以很方便的定义初始数组的大小。再者题目中明确要求两种优惠方式只能选一个,那就是从满减优惠和打折优惠中选择即可。总价中包含(不可特价优惠品的价格)+(可特价优惠品的价格)-(可优惠的额度)。

import java.util.Scanner;
import java.text.DecimalFormat;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int m,n;
        n = in.nextInt();
        m = in.nextInt();

        int[][] n_buy = new int[10][2];
        int[][] m_cost = new int[10][2];
        for (int i = 0; i < n; i++){
            n_buy[i][0] = in.nextInt();
            n_buy[i][1] = in.nextInt();
        }

        for (int i = 0; i < m; i++){
            m_cost[i][0] = in.nextInt();
            m_cost[i][1] = in.nextInt();
        }

        double min = Integer.MAX_VALUE;
        double res = 0.0;
        int resN = 0;
        int all = 0;

        for (int i = 0; i < n; i++){
            all += n_buy[i][0];
            if (n_buy[i][1] == 1)
                //允许特价优惠
                res += n_buy[i][0];
            else if(n_buy[i][1] == 0)
                //不允许特价优惠
                resN += n_buy[i][0];
        }
        double temp = resN + res * 0.8;
        if (temp < min)
            min = temp;
        for (int i = 0; i < m; i++){
            if (all < m_cost[i][0]){
                continue;
            }
            temp = all - m_cost[i][1];
            if (temp < min){
                min = temp;
            }
        }
        DecimalFormat f = new DecimalFormat("0.00");  
        System.out.println(f.format(min)); 
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值