题解 | #自动售货系统#

自动售货系统

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;
    }
}

全部评论

相关推荐

06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
陆续:不可思议 竟然没那就话 那就我来吧 :你是我在牛客见到的最美的女孩
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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