华为oj-自动售货机

华为oj上的贩卖系统,找钱用背包法,通过。


import java.util.*;

class Good
{
    final int price;
    int number;
    public Good(int price,int number)
    {
        this.price=price;
        this.number=number;
    }
}
class Box
{
    private static int[] MONEY={1,2,5,10};
    private int[] money_metrix;
    private HashMap<String, Good> goods_map;
    int put_rest;
    int all_goods;
    public Box() {
        money_metrix=new int[4];
        goods_map=new HashMap<String, Good>(6);
        goods_map.put("A1", new Good(2, 0));
        goods_map.put("A2", new Good(3, 0));
        goods_map.put("A3", new Good(4, 0));
        goods_map.put("A4", new Good(5, 0));
        goods_map.put("A5", new Good(8, 0));
        goods_map.put("A6", new Good(6, 0));
    }
    public void followCommand(String command)
    {

        String[] com=command.split("[ -]+");
        switch(com[0].charAt(0))
        {
        case 'r':
        {
            int[] num=new int[10];
            for(int i=0;i<10;i++)
            {
                num[i]=Integer.parseInt(com[i+1]);
            }
            opReset(num);
            break;
        }
        case 'p':
        {
            opPay(Integer.parseInt(com[1]));
            break;
        }
        case 'b':
        {
            opBuy(com[1]);
            break;
        }
        case 'c':
        {
            opChange();
            break;
        }
        case 'q':
        {
            opQuery(Integer.parseInt(com[1]));
            break;
        }
        default:
        }
    }       

    private void opQuery(int option) {
        Good a;
        switch (option) {
        case 0:
            for(int i=1;i<=6;i++)
            {
                a=goods_map.get("A"+i);
                System.out.println("A"+i+" "+a.price+" "+a.number);
            }
            break;
        case 1:
            for(int i=0;i<4;i++)
            {
                System.out.println(MONEY[i]+" yuan coin number="+money_metrix[i]);
            }           
            break;
        default:
            System.out.println("E010:Parameter error");
            break;
        }

    }
    private void opChange() {

        if(put_rest==0)
        {
            System.out.println("E009:Work failure");
        }
        else {
            int i,count,j,tmp_money;
            int[][] pull_metrix=new int[put_rest+1][4];
        int[] bag=new int[put_rest+1];
            bag[0]=0;
            for(i=1;i<=put_rest;i++)
            {
                bag[i]=10000;
            }
            for(i=0;i<4;i++)
            {
                count=money_metrix[i];
                tmp_money=MONEY[i];
                while(count-->0)
                {
                    for(j=put_rest;j>=tmp_money;j--)
                    {
                        if(bag[j]>bag[j-tmp_money]+1)
                        {
                            pull_metrix[j][0]=pull_metrix[j-tmp_money][0];
                            pull_metrix[j][1]=pull_metrix[j-tmp_money][1];
                            pull_metrix[j][2]=pull_metrix[j-tmp_money][2];
                            pull_metrix[j][3]=pull_metrix[j-tmp_money][3];
                            pull_metrix[j][i]++;
                            bag[j]=bag[j-tmp_money]+1;
                        }   
                    }
                }
            }
            count=put_rest;
            while(count>0)
            {
                if(bag[count]<100)
                {
                    put_rest=0;
                    for(i=0;i<4;i++)
                    {
                        money_metrix[i]-=pull_metrix[count][i];
                    }
                    System.out.println("1 yuan coin number="+pull_metrix[count][0]);
                    System.out.println("2 yuan coin number="+pull_metrix[count][1]);
                    System.out.println("5 yuan coin number="+pull_metrix[count][2]);
                    System.out.println("10 yuan coin number="+pull_metrix[count][3]);
                    break;
                }
                else {
                    count--;
                }
            }   
        }   
    }
    private void opBuy(String buy_name) {
        Good good=goods_map.get(buy_name);
        if(good==null)
        {
            System.out.println("E006:Goods does not exist");
        }
        else if(good.number==0)
        {
            System.out.println("E007:The goods sold out");
        }
        else if (put_rest<good.price) {
            System.out.println("E008:Lack of balance");
        }
        else {
            good.number--;
            all_goods--;
            put_rest-=good.price;
            System.out.println("S003:Buy success,balance="+put_rest);
        }   
    }
    private void opPay(int money) {
        if(money!=1&&money!=2&&money!=5&&money!=10)
        {
            System.out.println("E002:Denomination error");
        }
        else if((money==5||money==10)&&money_metrix[0]+2*money_metrix[1]<money)
        {
            System.out.println("E003:Change is not enough, pay fail");
        }
        else if(put_rest+money>10)
        {
            System.out.println("E004:Pay the balance is beyond the scope biggest");
        }
        else if(all_goods==0)
        {
            System.out.println("E005:All the goods sold out");
        }
        else {
            put_rest+=money;
            switch(money)
            {
            case 1:money_metrix[0]++;break;
            case 2:money_metrix[1]++;break;
            case 5:money_metrix[2]++;break;
            case 10:money_metrix[3]++;break;
            }
            System.out.println("S002:Pay success,balance="+put_rest);
        }
    }
    private void opReset(int[] num) {
        goods_map.get("A1").number=num[0];
        goods_map.get("A2").number=num[1];
        goods_map.get("A3").number=num[2];
        goods_map.get("A4").number=num[3];
        goods_map.get("A5").number=num[4];
        goods_map.get("A6").number=num[5];
        money_metrix[0]=num[6];
        money_metrix[1]=num[7];
        money_metrix[2]=num[8];
        money_metrix[3]=num[9];
        all_goods=num[0]+num[1]+num[2]+num[3]+num[4]+num[5];
        put_rest=0;
        System.out.println("S001:Initialization is successful");
    }
}
public class Main
{
    public static void main(String[] args){
        Box box=new Box();
        Scanner scan=new Scanner(System.in);
        String[] command=scan.nextLine().split(";");
        for(int c=0;c<command.length;c++)
        {
            box.followCommand(command[c]);
        }

        scan.close();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值