【笔试题】拼多多1小熊吃糖果

描述

有n只小熊,他们有着不同的战斗力。每次他们吃糖时,会按照战斗力来排。战斗力高的小熊拥有优先选择权。前边的小熊吃饱了,后边的小熊才能吃。每只小熊有一个饥饿值,每次进食时,小熊会选择最大的能填饱自己当前饥饿值的那颗糖来吃,可能吃完没饱会重复上述过程,但不会选择吃撑。
给出n只小熊的战斗力和饥饿值,和m颗糖。
求进食完,每只小熊剩余的饥饿值。


第一行:两个整数,n m分别代表小熊的数量和糖的数量。
第二行:m个整数,糖的能量。
接下来:n行,每行两个整数,分别表示小熊的战斗力和饥饿值。


输入
2 5
5 6 10 20 30(糖值)
4 34(优先级和饥饿值)
5 35
输出
4
0

分析:

  1. 对战斗力排序的时候,饥饿值也排序。
  2. 打印的时候,要按原来的顺序打印。所以排序前,还要一个辅助数组记录顺序。
  3. 最后可以不排序,按索引顺序来打印。

import java.util.Arrays;
import java.util.Scanner;

public class XiaoXiong1 {
     public static void main(String[] args) {
            Scanner sc = new Scanner(System.in );
            int n = sc.nextInt();
            int m = sc.nextInt();
            int suger[] = new int[m];
            int[][] panda = new int[n][3];
            for(int i=0;i<m;i++){
                suger[i] = sc.nextInt();
            }
            for(int i=0;i<n;i++){
                panda[i][0] = sc.nextInt();
                panda[i][1] = sc.nextInt();
                panda[i][2] = i;
            }
            for(int i=0;i<n;i++){
                for(int j=n-1;j>i;j--){
                    if(panda[j][0]>panda[j-1][0]){
                        int temp1 = panda[j][0];
                        int temp2 = panda[j][1];
                        int temp3 = panda[j][2];
                        panda[j][0] = panda[j-1][0];
                        panda[j-1][0] = temp1;
                        panda[j][1] = panda[j-1][1];
                        panda[j-1][1] = temp2;
                        panda[j][2] = panda[j-1][2];
                        panda[j-1][2] = temp3;
                    }
                }
            }

            Arrays.sort(suger);

            for(int i=0;i<n;i++){
                for(int j=m-1;j>=0;j--){
                    if(panda[i][1]>=suger[j]){
                        panda[i][1]-=suger[j];
                        suger[j] = Integer.MAX_VALUE;
                    }
                }
            }

            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    if(panda[j][2]==i){
                        System.out.println(panda[j][1]);
                    }
                }
            }
        }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值