题目:n张牌,每张牌上 写着数字ai;使用最优策略,牛牛先抽,羊羊后抽,求牛牛的总分与羊羊的总分差值;
分析:最优策略,即贪心算法,每次选择当前最大的元素;
实现:
1.基于贪心算法,将元素进行排序(降序排列);
2.每次选择当前最大的元素,牛牛为奇数项,羊羊为偶数项;
说明:输入三个数,分别为:2,7,4,输出结果为:5
输入:
3
2 7 4
输出:
5
package com.bj.tencent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
/* 纸牌游戏: */
public class Test4 {
public static void main(String[] args) {
@SuppressWarnings("resource")
int count = new Scanner(System.in).nextInt();
ArrayList<Integer> list = new ArrayList<>();
@SuppressWarnings("resource")
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
String strs [] = str.split(" ");
//如果输入不相符,直接退出
if (count!=strs.length) return;
for (int i = 0; i < strs.length; i++) {
list.add(Integer.parseInt(strs[i]));
}
//重写方法,将其改为降序排列
Collections.sort(list,new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
int sum = 0;
for (int i = 0; i < list.size(); i++) {
if(i%2==0){
sum+=list.get(i);
}else{
sum-=list.get(i);
}
}
//如果含有偶数个元素,需要将元素求绝对值
//if (list.size()%2==0) sum = -sum;
System.out.println(sum);
}
}
知识点:
1.数据输入和字符串的切分;
2.如何使用排序函数?(考虑什么数据结构在满足题目要求的情况下,可以实现排序);
3.对系统函数进行重写,实现降序排序,满足贪心的原则;
网友评论