版权声明:转载请注明博主地址 https://blog.csdn.net/weixin_43885417/article/details/86612077
针对这道题,核心算法如下:
- 首先我们需要定义一个N * 3的数组,用于存放每种月饼的库存量,月饼的总售价,和月饼的单价。保证一 一对应。
- 然后,我们要求出每种月饼的单价。
- 对月饼单价进行降序排序。
- 定义递归函数,
(1)每次最大需求量减去,当前月饼的总量,总价格变量直接累加上最大需求量减去,当前月饼的总量,价格变量直接累加,当前月饼的总售价。
(2)如果最大需求量,已经减到小于当前的月饼库存量,这个时候,总价格变量加上,当前用最大需求量值乘上当前月饼单价。 - 输出结果总价,程序结束。
下面看代码:
import java.util.Scanner;
public class Main {
static double count = 0;
static int num = 0;
static double countMoney = 0;
static double countNum = 0;
static double [][] data;
public static void main(String[] args) {
Scanner sca = new Scanner(System.in);
num = sca.nextInt();
data = new double [num][3];
count = sca.nextInt();
for(int i = 0; i < num; i++) {
data[i][0] = sca.nextFloat();
}
for(int j = 0; j < num; j++) {
data[j][1] = sca.nextFloat();
}
for(int k = 0; k < num; k++) {
data[k][2] = data[k][1] / (data[k][0] * 1.000);
}
sort();
showResult(0);
}
public static void showResult(int n) {
if(count == 0 || n == num) {
System.out.println(String.format("%.2f", countMoney));
return;
}
if(count >= data[n][0]) {
count -= data[n][0];
countMoney += data[n][1];
}else {
countMoney += (count * data[n][2]);
count = 0;
}
showResult(n + 1);
}
//排序
public static void sort() {
int i, j;
double temp;
for (j = 0; j < num; j++) {
for (i = num - 1; i > j; i--) {
if (data[i][2] > data[i - 1][2]) {
temp = data[i][0];
data[i][0] = data[i - 1][0];
data[i - 1][0] = temp;
temp = data[i][1];
data[i][1] = data[i - 1][1];
data[i - 1][1] = temp;
temp = data[i][2];
data[i][2] = data[i - 1][2];
data[i - 1][2] = temp;
}
}
}
}
}