有n个人正在饭堂排队买海北鸡饭。每份海北鸡饭要25元。奇怪的是,每个人手里只有一张钞票(每张钞票的面值为25、50、100元),而且饭堂阿姨一开始没有任何零钱。请问饭堂阿姨能否给所有人找零(假设饭堂阿姨足够聪明)

思路:

一个数组存储n个人的费用,另一个集合来存所要找的零钱,考虑顺序

代码:

import java.util.ArrayList;
import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }
        System.out.println(test(arr, list));
    }

    public static String test(int[] arr, ArrayList<Integer> list) {
        int keyi=0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == 25) {
                list.add(arr[i]);
                keyi++;

            } else if (arr[i] == 50) {
                for (int j = 0; j < list.size(); j++) {
                    if (list.get(j) == 25) {
                        list.remove(j);
                        list.add(50);
                        keyi++;
                        break;
                    }

                }
            }
            else if (arr[i] == 100) {
                int twenteFive=0;
                int fifty=0;
                for (int j = 0; j<list.size(); j++) {
                    if(list.get(j)==25) {
                        twenteFive++;
                    }else if(list.get(j)==50) {
                        fifty++;
                    }
                }

                if(twenteFive>=3 || fifty>=1&&twenteFive>=1) {
                    if(fifty>=1&&twenteFive>=1) {
                        for (int j = 0; j < list.size(); j++) {
                            if(list.get(j)==25) {
                                list.remove(j);
                                break;
                            }
                        }

                        for (int j = 0; j <list.size(); j++) {
                            if(list.get(j)==50) {
                                list.remove(j);
                                break;
                            }
                        }
                        keyi++;

                    }
                    else if(twenteFive>=3) {

                        for (int j = 0; j <3; j++) {
                            for (int j2 = 0; j2 < list.size(); j2++) {
                                if(list.get(j2)==25) {
                                    list.remove(j2);
                                    break;
                                }
                            }
                        }
                        keyi++;

                    }
                }
            }
        }

        if (keyi==arr.length){
            return "YES";
        }else {
            return "NO";
        }

    }
}

原文地址:https://www.cnblogs.com/BLACKJT/p/12417016.html

时间: 2024-08-29 04:55:59

有n个人正在饭堂排队买海北鸡饭。每份海北鸡饭要25元。奇怪的是,每个人手里只有一张钞票(每张钞票的面值为25、50、100元),而且饭堂阿姨一开始没有任何零钱。请问饭堂阿姨能否给所有人找零(假设饭堂阿姨足够聪明)的相关文章

给你六种面额1 5 10 20 50 100元的纸币假设每种币值的数量足够多

编写程序求组成N元的不同组合的个数.输入一个数字N输出一个也是数字,为组成N的组合个数.如输入2,输出1,输入5,输出2 背包问题: 1 function fn (all) { 2 const arr = [1, 5, 10, 20, 50, 100], 3 len = arr.length, 4 res = []; 5 for (let i = 0; i <= len; i++) { 6 res[i] = []; 7 res[i][0] = 1; 8 } 9 for (let j = 1; j

牙膏5元,牙刷2元,肥皂3元,100元买这三种恰好花光,请问有多少种可能性

Console.WriteLine("牙膏5元,牙刷2元,肥皂3元,100元买这三种恰好花光"); int a1 = 0, b1 = 0, c1 = 0, sum = 0; for (int a = 0; a <= 20; a++) { a1 = 5 * a; for (int b = 0; b <= 50; b++) { b1 = 2 * b; for (int c = 0; c < 33; c++) { c1 = 3 * c; if (a1 + b1 + c1 =

百钱买百鸡:公鸡5元一只,母鸡3元一只,小鸡1元3只,问100元买100只鸡,问有多少种买法,输出每种买法的结果!

/** * 百钱买百鸡:公鸡5元一只,母鸡3元一只,小鸡1元3只,问100元买100只鸡,问有多少种买法,输出每种买法的结果! * */ public class Test3 { public static void main(String[] args) { int c = 0; for (int a = 0; a < 100; a++) { for (int b = 0; b < 100; b++) { if ((7 * a + 4 * b) == 100) { c++; System.o

试题系列五(公鸡5元一只,母鸡3元一只,小鸡1元3只,求100元刚好买100只鸡的可能)

1 //5.公鸡5元一只,母鸡3元一只,小鸡1元3只,求100元刚好买100只鸡的可能 2 3 #include<stdio.h> 4 5 int main(int argc, char** argv) 6 { 7 int i = 0; 8 int j = 0; 9 10 for (i = 0; i <= 20; i++) 11 { 12 for (j = 0; j <= 30; j++) 13 { 14 if ( (0 == ((100-i-j)%3)) && (

100元买酒,2元买一瓶,两个空瓶换一瓶,求最后能买多少瓶

最近碰到一道题目.就是关于酒瓶的(100元买酒,2元买一瓶,两个空瓶换一瓶,求最后能买多少瓶). 刚开始没头绪,仔细一想原来不过如此. 经过分析,所能买到的酒瓶等于    最后所有的空瓶数 java代码求解如下: import java.util.Scanner; public class Bottle {         //空瓶数 static int blank=0; //直接能买到的酒瓶数 static int sum=0; public static void main(String[

如何用c#程序算出100元最多可以买多少桃子?

问题:桃子3元一个,3个核桃可以换一个桃子,你拥有100元,最多可以吃到多少个桃子 思路: 以上内容:重复的动作有: 换取桃子 计算剩余桃核数 吃掉桃子 计算当前拥有的桃核 重复终止的条件 :拥有的核桃不足以换取桃子 先定义几个变量分别表达钱,桃子单价,换桃子需要的核桃数量 int money = 100;price = 3; exchange = 3; 在定义当前吃到的桃子总数,目前拥有的桃核数量 int eated,kernel: 先用100元全部买桃子,一共吃到的桃子和剩下的桃核数量为:

任正非:“灭了三星苹果”的话 谁讲一次罚100元

日前,华为CEO任正非在华为消费者业务集团大会上讲话称,消费者业务做的比他想象的还要好一些,但也还有很大的改进空间. 华为手机业务目前全球第三,排在三星和苹果之后. 任正非称,不要做无价值的盲目创新,应该关注最佳用户体验.他还表示要向所有优秀的人学习,被任正非列为学习对象的企业有小米.OPPO和vivo以及三星和苹果. 他提出华为要学习小米的营销模式."我们没有绝对地排除互联网思维,也没有绝对肯定化,而是实用主义心态,根据不同的情况选择不同的 武器 .我只有一个思维--利润." 之前华

100元划分

#include <stdio.h> //100元划分 int a[] ={1,10,20,50,100}; int q(int n,int m)//n为100元,m为数组的下标 { if(n<1||a[m]<1) return 0; if(n==1||a[m]==1) return 1; if(n<a[m]) return q(n,m-1); if(n==a[m]) return q(n,m-1)+1; return q(n,m-1)+q(n-a[m],m); } int

2016年我国慈善捐赠共1392亿元 人均捐赠100元g

从外观看,这手套跟普通手套没什么两样,材质.形状都很普通.中国羽毛球队总教练.青岛市微尘博爱大使李永波捐款5万元在城阳区源头小学设立红十字羽毛球博爱校园.茶圈儿内称吕礼臻.叶荣枝这些种茶制茶的人叫"茶人",而茶小隐这样寻茶品茶的人叫"茶亲".这里计算出前三年保养总费用3176元,因此平均一年的费用为1059元.邓电明的履历显示,其崭露头角于上世纪80年代,而立之年便获任福建三明钢铁集团一副厂长之职,后累迁至集团副董事长.[李克强:要让社会有"兜底"