算法Day32 买卖椰子水

买卖椰子水

Description

在海滩上,一杯椰子水的售价为5元。一名顾客一次购买一杯椰子水(按照bills支付的顺序)。
每位顾客购买椰子水时,可能向你支付 5 元、10 元或 20 元。你必须给每个顾客正确找零,对于支付 5 元的客户你无需找零,对于支付 10 元的客户你需要给客户找零 5 元,对于支付 20 元的客户你需要找零 15 元。
注意,一开始你手头没有任何零钱。
给你一个整数数组 bills,其中 bills[i] 是第 i 位顾客付的账。如果你能给每个顾客正确找零,返回true,否则返回false.
提示:
(1)1 ≤ bills.length ≤ 10^5
(2)bills[i] 不是5就是10或是20

Input

第一行输入顾客的数量n,1 ≤ n ≤ 10^5
第二行按照顾客购买的先后顺序输入顾客支付的现金(只能为5/10/20),中间用空格隔开
如:
5
5 5 5 10 20

Output

返回是否能给每个顾客正确找零
true/false

Sample

算法Day32 买卖椰子水_第1张图片

代码

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 输入顾客数量
        int n = scanner.nextInt();
        // 输入顾客支付的现金
        int[] bills = new int[n];
        for (int i = 0; i < n; i++) {
            bills[i] = scanner.nextInt();
        }
        // 返回结果
        boolean result = sellingCoconutWater(bills);
        System.out.println(result);
    }
    public static boolean sellingCoconutWater(int[] bills) {
        int five = 0;
        int ten = 0;
        int twenty = 0;
        for(int i = 0;i<bills.length;i++){
            if(bills[i]==5){
                five++;
            }else if(bills[i]==10){
                if(five==0){
                    return false;
                }else {
                    five--;
                    ten++;
                }
            }else {
                if(ten==0&&five<3){
                    return false;
                } else if (ten==0&&five>=3) {
                    five-=3;
                    twenty++;
                } else if (ten>0&&five==0) {
                    return false;
                } else if (ten>0&&five>0) {
                    ten--;
                    five--;
                }
            }
        }
        return true;
    }
}

思路

贪心法
每次支付5元直接five++
支付10元five- -,ten++
支付20时先给10元再给5元(只有只剩5元钞票才全部给5元)

你可能感兴趣的:(算法,算法)