链家笔试链家——找寻最小消费获取最大平均分java

时间:2023-03-10 00:34:57
链家笔试链家——找寻最小消费获取最大平均分java

链家找寻最小消费获取最大平均分

输入:

5 5 4#表示科目数n,每科最大分值r,平均分avg

5 2#每科的实际得分,分数加1分的消耗的能量

4 7

3 1

3 2

2 5

输出:

4 #到达n*avg消耗的最小能量

package Campus;
import java.io.*;
import java.util.*;
public class Main
{
public static void main(String args[])
{
Scanner cin = new Scanner(System.in);
int n, r, avg; n = cin.nextInt();
r = cin.nextInt();
avg = cin.nextInt();
int[][] arr = new int[n][2];
for(int i = 0; i < n; i++){
for(int j = 0; j < 2; j++){
arr[i][j] = cin.nextInt();
}
} int temp_sum = 0;
for(int i = 0; i < n; i++){
temp_sum += arr[i][0];
}
int temp_avg = 0;
temp_avg = temp_sum / n; if (temp_avg >= avg){
System.out.println(0);
}else{
int[] arr0 = new int[n];
int[] arr1 = new int[n];
for(int i = 0; i < n; i++){
arr0[i] = arr[i][0];
arr1[i] = arr[i][1];
}
int temp0=0;
int temp1=0;
for(int i = 0; i < n-1; i++){
for(int j = i; j< n; j++){
if(arr0[i] < arr0[j]){
temp0=arr0[i];
temp1=arr1[i];
arr0[i]=arr0[j];
arr1[i]=arr1[j];
arr0[j]=temp0;
arr1[j]=temp1; }
}
}
//记录差多少分
int temp3 = 0;
temp3 = n*avg-temp_sum;
for(int i = 0; i < n; i++){
if(arr0[i] >= avg) continue;
else{
for(int j= i;j < n-1; j++){
for(int k = j+1; k< n; k++){
if(arr1[j] > arr1[k]){
temp0=arr0[i];
temp1=arr1[i];
arr0[j]=arr0[k];
arr1[j]=arr1[k];
arr0[k]=temp0;
arr1[k]=temp1; }
} }
//记录临时坐标差
int temp4 = temp3;
int temp5 = 0;
for (int g = i; g < n; g++){
temp4=temp4-arr1[i]*(r-arr0[i]);
temp5=temp5+arr1[i]*(r-arr0[i]);
if ( temp4<=0){
System.out.println(temp5);
break;
}
}
}
for(int v = 0; v < n; v++){
System.out.println(arr0[v]+","+arr1[v]);
}
break;
}
}
}
}