美文网首页
纸牌游戏-(腾讯2018)

纸牌游戏-(腾讯2018)

作者: 天使的流浪 | 来源:发表于2019-01-03 10:02 被阅读0次

    题目: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.对系统函数进行重写,实现降序排序,满足贪心的原则;

    相关文章

      网友评论

          本文标题:纸牌游戏-(腾讯2018)

          本文链接:https://www.haomeiwen.com/subject/zxoxrqtx.html