小熊吃糖

小熊吃糖

1.小熊有战斗力和饥饿值;
2.战斗值高的小熊优先吃糖,消除饥饿;
3.若小熊未吃饱,将继续吃糖来消除饥饿,但是小熊不会吃撑;
输入:
第一行两个整数,一个是小熊个数n,糖果个数m;
第二行,每个糖果的大小,表示可以消除多少的饥饿;
剩下n行,两个整数,一个数是小熊的战斗力,一个值是小熊的饥饿值;
返回:
返回每个小熊剩余的饥饿值。
实例:
2 5
5 6 10 20 30
4 34
3 35
返回:
4
0
注意:下述代码只是通过上述测试用例,并没有具体在测试。
分析:

  1. 小熊吃糖,根据战斗力具有优先权,所以需要对小熊按照战斗力排序;
  2. 小熊吃了一个糖过后,该糖果就不存在了,所以suger[i]=0;
  3. 小熊吃糖的终止条件是:小熊剩下的饥饿值小于所有糖果的最小值;或者剩余饥饿值==0;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class test1 {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();//bear
        int m = in.nextInt();//suger
        int[] suger = new int[m];
        int[] bear = new int[n];
        for(int i=0;i<m;i++){
            suger[i] = in.nextInt();
        }
        Map<Integer,Integer> map = new HashMap<Integer,Integer>();
        for(int i=0;i<n;i++){
            int zdl = in.nextInt();
            int je = in.nextInt();
            bear[i] = zdl;
            map.put(zdl,je);
        }
        List<Map.Entry<Integer,Integer>> list = new LinkedList<Map.Entry<Integer,Integer>>(map.entrySet());
           Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
               public int compare(Map.Entry<Integer, Integer> arg0,Map.Entry<Integer, Integer> arg1){
                   return (arg1.getKey()-arg0.getKey()==0) ? (arg0.getKey()-arg1.getKey()):(arg1.getKey()-arg0.getKey());
               }
        });
           for(int i = 0;i<list.size();i++){
               int jez = list.get(i).getValue();
               Arrays.sort(suger);
                for(int j=m-1;j>=0;j--){
                    if(jez>=suger[j]){
                        jez -=suger[j];
                        suger[j] = 0;
                    }else{
                        continue;
                    }
                }
                map.put(list.get(i).getKey(), jez);
              }

           for(int i=0;i<n;i++){
                System.out.println(map.get(bear[i]));
            }

    }

}

运行结果:
输入:
2 5
5 6 10 20 30
4 34
3 35
输出:
4
0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值