链家笔试链家——找寻最小消费获取最大平均分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; } } } }