题解 | #自动售货系统#

自动售货系统

https://www.nowcoder.com/practice/cd82dc8a4727404ca5d32fcb487c50bf

import java.util.*;

//逻辑不难理解,但是能在机考时间内想出来并且实现的可能性不大(对我而言)
//死记硬背,默写出来就算成功
public class Main {
    static ArrayList<Good> goods = new ArrayList<Good>();
    static ArrayList<Money> moneys = new ArrayList<Money>();
    static int goodTotal;
    static int moneyTotal;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        goods.add(new Good("A1",2));
        goods.add(new Good("A2", 3));
        goods.add(new Good("A3", 4));
        goods.add(new Good("A4", 5));
        goods.add(new Good("A5", 8));
        goods.add(new Good("A6", 6));
        
        moneys.add(new Money(1));
        moneys.add(new Money(2));
        moneys.add(new Money(5));
        moneys.add(new Money(10));  
        while(sc.hasNextLine()){
            String s = sc.nextLine();
            String[] arr = s.split(";");
            for(int i=0;i<arr.length;i++){
                if(arr[i].contains("r")){
                    rStep(arr[i]);
                }else if(arr[i].contains("p")){
                    pStep(arr[i]);
                }else if(arr[i].contains("b")){
                    bStep(arr[i]);
                }else if(arr[i].contains("q")){
                    qStep(arr[i]);
                }else if(arr[i].contains("c")){
                    cStep(arr[i]);
                }
            }
        }      
    }

    public static void rStep(String s){
        String[] strs = s.split("\\s+");
        String[] goodNum = strs[1].split("-");
        for(int i=0;i<goodNum.length;i++){
            int volume = Integer.parseInt(goodNum[i]);
            goods.get(i).volume = volume;
            goodTotal += volume;
        }
        String[] moneyNum = strs[2].split("-");
        for(int i=0;i<moneyNum.length;i++){
            moneys.get(i).count = Integer.parseInt(moneyNum[i]);
        }
        moneyTotal = 0;
        System.out.println("S001:Initialization is successful");
    }

    public static void pStep(String s){
        String[] msg = s.split("\\s+");
        int num=Integer.parseInt(msg[1]);
        if(num!=1&&num!=2&&num!=5&&num!=10){
            System.out.println("E002:Denomination error");
            return;
        }
        if(num>2&&moneys.get(0).count+moneys.get(1).count*2<num){
            System.out.println("E003:Change is not enough, pay fail");
            return; 
        }
        if(goodTotal==0){
            System.out.println("E005:All the goods sold out");
            return;
        }

        moneyTotal += num;

        if(num==1){
            moneys.get(0).count++;
        }else if(num==2){
            moneys.get(1).count++;
        }else if(num==5){
            moneys.get(2).count++;
        }else if(num==10){
            moneys.get(3).count++;
        }
        System.out.println("S002:Pay success,balance="+moneyTotal);
    }

    public static void bStep(String s){
        String[] msg = s.split(" ");
        String goodName = msg[1];
        boolean exist = false;
        Good good = null;
        for(int i=0;i<goods.size();i++){
            if(goods.get(i).name.equals(goodName)){
                exist = true;
                good = goods.get(i);
                break;
            }
        }
        if(!exist){
            System.out.println("E006:Goods does not exist");
            return;
        }
        if(good.volume==0){
            System.out.println("E007:The goods sold out");
            return;
        }
        if(good.price>moneyTotal){
            System.out.println("E008:Lack of balance");
            return;
        }
        moneyTotal -= good.price;
        System.out.println("S003:Buy success,balance="+moneyTotal);

    }
    public static void qStep(String s){
        if(!s.contains(" ")){
            System.out.println("E010:Parameter error");
            return;
        }
        String[] msg = s.split("\\s+");
        if(msg[1]!="1"&&msg[1]!="0"){
            System.out.println("E010:Parameter error");
            return;
        }
        if(msg[1]=="0"){
            System.out.println("A1 2 "+goods.get(0).volume);
            System.out.println("A2 3 "+goods.get(1).volume);
            System.out.println("A3 4 "+goods.get(2).volume);
            System.out.println("A4 5 "+goods.get(3).volume);
            System.out.println("A5 8 "+goods.get(4).volume);
            System.out.println("A6 6 "+goods.get(5).volume);
            return;
        }
        if(msg[1]=="1"){
            System.out.println("1 yuan coin number="+moneys.get(0).count);
            System.out.println("2 yuan coin number="+moneys.get(1).count);
            System.out.println("5 yuan coin number="+moneys.get(2).count);
            System.out.println("10 yuan coin number="+moneys.get(3).count);
            return;
        }
    }

    public static void cStep(String s){
        if(moneyTotal==0){
            System.out.println("E009:Work failure");
            return;
        }
        int tenNum=0;
        int fiveNum=0;
        int twoNum=0;
        int oneNum=0;
        while(moneyTotal>=10&&moneys.get(3).count>0){
            moneyTotal -= 10;
            moneys.get(3).count--;
            tenNum++;
        }
        while(moneyTotal>=5&&moneys.get(2).count>0){
            moneyTotal -= 5;
            moneys.get(2).count--;
            fiveNum++;
        }
        while(moneyTotal>=2&&moneys.get(1).count>0){
            moneyTotal -= 2;
            moneys.get(1).count--;
            twoNum++;
        }
        while(moneyTotal>=1&&moneys.get(0).count>0){
            moneyTotal -= 1;
            moneys.get(0).count--;
            oneNum++;
        }
        moneyTotal=0;
        System.out.println("1 yuan coin number=" + oneNum);
        System.out.println("2 yuan coin number=" + twoNum);
        System.out.println("5 yuan coin number=" + fiveNum);
        System.out.println("10 yuan coin number=" + tenNum);        
    }
}
class Good {
    String name;
    int price;
    int volume;
    public Good(String name, int price){
        this.name = name;
        this.price = price;
    } 
}

class Money{
    int id;
    int count;
    public Money(int id){
        this.id = id;
    }
}

全部评论

相关推荐

2025-12-06 01:10
已编辑
哈尔滨工程大学 Java
一面问的真细,二面不知为啥变双机位。9.29快手主站平时怎么学习&nbsp;AI&nbsp;的,国内外知名大模型,实习公司都用的什么大模型,怎么评估效果的java池化思想,线程池构造方法的核心参数,线程池中阻塞队列注意事项,submit方法参数和执行逻辑,shutdown和shutdownnow,核心线程允许过期吗threadlocal底层,为什么key是弱引用,key回收了再get或者set这个value会怎样aqs,如何保证公平性java代理java堆划分,新生代还有别的晋升老年代的情况吗,什么时候触发gc,gc失败抛什么异常,如何排查oom,导出dump命令redis数据结构,哪个底层是跳表,和其他数据结构对比布隆过滤器会出现大key问题吗,你咋实现的布隆过滤器你怎么实现redis分布式锁,可重入,续期聚簇索引非聚簇索引select语句会加锁吗,怎么实现的不加锁undolog&nbsp;redolog&nbsp;binlog怎么能让select加锁,update这个范围加的什么锁,update一条呢手撕简单01背包,接雨水10.10快手主站意图识别用的哪个大模型,走到意图和rag的比例,faq是点击的吗自然语言怎么识别的gap一年干啥了,转正怎么样没跟组里提意向吗,研究生研究方向是传统算法吗,会大模型微调吗注册场景为什么用布隆过滤器,原理分布式锁底层的key怎么拼的,value里是什么redis持久化zset底层mysql索引结构,一个表三个字段有主键唯一索引和没索引的字段会有几个b+树,聚簇索引非聚簇索引存的啥无手撕
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务