混战世界算法
混战世界题目如下
其中设三个连
第一个战斗力估值可以为a
第二个战斗力估值可以为b
第三个战斗力估值可以为(a+b)/2
三个连各自的差值是(a-b)/2
所以可以将最大值安排在一连,最小值安排在二连,中间值安排在三连
package cn.bjsxt.Array;
import java.util.*;
public class Test05 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int [] a = new int[n];
int [] b = new int[n];
for(int i=0;i<n;i++) {
a[i] = sc.nextInt();
}
for(int i=0;i<n;i++) {
b[i] = sc.nextInt();
}
solution(a,b);
}
private static void solution(int[] a, int[] b) {
int []list= new int[a.length];
for(int i = 0;i<a.length;i++){
// list[i] = new int(i,a[i] - b[i]);
}
Arrays.sort(list);
double sum = 0;
int avenge = list.length/3;
for(int i = 0;i<list.length;i++){
if(0<=i && i<avenge ){
sum += b[list[i]];
}else if(i >= avenge && i< 2 *avenge ){
sum += ((a[list[i]] +b[list[i]])*1.0)/2;
}else{
sum += a[list[i]];
}
}
System.out.println(sum);
}
}
该答案只是对于最初三个值的定义,以及物理魔法值数组定义
借鉴网上答案应该在之后再对(a-b)/2进行排序再将值返回
//用于存储索引坐标以及(Ai-Bi)
static class Diff implements Comparable{
int index;
int value;
public Diff(int index, int value) {
this.index = index;
this.value = value;
}
public int getIndex() {
return index;
}
//按照(A-B)/2 进行排序
@Override
public int compareTo(Object o) {
Diff diff = (Diff) o;
if(this.value > diff.value)
return 1;
else if(this.value == diff.value)
return 0;
else
return -1;
}
}
}
---------------------