本文主要是介绍英雄联盟对战,为求公平需要选取两组分值相差最低的队伍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一.分析
- 两组分值相差最低的,也就是说一个数组分成两个子集,其子集和的差值最小
- 可以换成背包问题,即从数组中选取一半的数作为子集,让这些子集的和与原来总和的一半越接近即可
- 从中选取与一半的总和最接近的一个子集(即需要排序)
二.代码如下
object TestLm extends App {import scala.io.StdIn//输入println("请输入10个数字,以空格区分:")val line = StdIn.readLine()//对输入切割成数组并且转为Intval arr = line.split("\\s+").map(_.toInt)//子集的容量val size_ = arr.size/2//总和的一半-->判断标准val sum_ = arr.sum/2//从数组取出子集容量的组合val iterator= arr.combinations(size_)//转成数组并且根据和的差值的绝对值进行排序,取最小的val arr1 = iterator.toArray.map(x=>(math.abs(x.sum-sum_),x)).sortBy(_._1).head._2val arr2 = arr.diff(arr1)println(arr1.mkString(",")+" 和:"+arr1.sum)println(arr2.mkString(",")+" 和:"+arr2.sum)println("差值为:"+math.abs(arr1.sum-arr2.sum))
}
三.结果如下:
这篇关于英雄联盟对战,为求公平需要选取两组分值相差最低的队伍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!