1. 程式人生 > >【筆試題】拼多多1小熊吃糖果

【筆試題】拼多多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]); } } } } }