题目:
某市市长获得了若干批口罩,给定每批口罩的数量,
市长要把口罩分配给市内的 2 所医院,由于物流限制,每一批口罩只能全部分配给其中一家医院。
市长希望 2 所医院获得的口罩总数之差越小越好。 请你计算这个差最小是多少?
答案提交
这是一道结果填空题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。(试题目录下有一个文件 mask.txt,内容与下面的文本相同)
9090400
8499400
5926800
8547000
4958200
4422600
5751200
4175600
6309600
5865200
6604400
4635000
10663400
8087200
4554000
题目解析:
首先15个数据,每次只能分配一个,且只能分配在A,B两个医院之间,一看题目就是一个非常典型的递归类的题目。
解决此题无非就是找变化,找重复,找出口,变化的是A,B两个医院的口罩数目在变,重复的是每一批口罩只能分配给A或者B,出口就是当k==15时,已经没有口罩了。
具体的递归内容:
https://blog.csdn.net/GX_666/article/details/122988079
题目代码:
package Test.Test_2020;
public class _4分配口罩 {
static int[] arr = {9090400,8499400 ,5926800 ,8547000,
4958200 ,4422600 ,5751200 ,4175600,
6309600 ,5865200 ,6604400, 4635000,
10663400 ,8087200 ,4554000};
static int res=Integer.MAX_VALUE;
public static void main(String[] args) {
f(0, 0, 0);
System.out.println(res);
}
private static void f(int k, int sum1, int sum2) {
if(k== arr.length){
int abs=Math.abs(sum1-sum2);
res=res<abs?res:abs;
return;
}
f(k+1,sum1+arr[k],sum2);
f(k+1,sum1,sum2+arr[k]);
}
}
题目答案: