【问题标题】:Rearrange an array to be optimal in comparison to another array与另一个数组相比,将数组重新排列为最佳
【发布时间】:2016-06-18 19:45:08
【问题描述】:

我已经完成了程序中最简单的部分,但我有点迷茫,不知道如何做这部分并同时保持高效。

attacker= {3,10,14,15,17,18};
defender = {1,5,7,9,12,18};

所以这两个都是长度相同的两个数组,并且也是排序的。 为了说明这一点,两个数组中的数字代表用户输入的卷数。

除此风险外,防御者可以重新排列他的阵列,以便赢得更多战斗。因此,如果他愿意,他可以将 5 与 3 配对。

我不知道如何做到这一点,同时又不会效率低下或容易出错。

【问题讨论】:

  • 给你:defender = {5,12,18, 9, 1,7};
  • @Eugene sh 我有两个数组,都从最低到最高排序。两个 arrsys 的元素都代表掷骰子。然后第二个数组被允许重新排列它自己,这样它就会比以前赢得更多的骰子

标签: c arrays sorting


【解决方案1】:

我会提出这个算法:

合并两个数组并标记防御者(d)或攻击者(a)的元素:

d a d d d  a  d  a  a  a  d  a
1 3 5 7 9 10 12 14 15 17 18 18

(对于两个相等的元素,首先放置防御者)。

然后取a d 模式所在的对;这些将是防守方获胜的战斗:

d a d d d  a  d  a  a  a  d  a
1 3 5 7 9 10 12 14 15 17 18 18
  ^ ^      ^  ^        ^  ^

然后把中奖号码排在最前面,输的号码最后排好:

defender = {5, 12, 18, 1, 7, 9}

【讨论】:

  • 目前在我的程序中我们使用mergesort,我正在考虑通过创建一个更大的数组(在这种情况下大小为12)并在其上调用mergesort来合并数组,但是我会丢失哪个roll是攻击者/防御者。知道如何解决这个问题吗?
  • 并行处理两个数组。或将信息存储在struct
  • +1 这是一个非常聪明的方法。我开始考虑复杂的 AI 东西,这些东西效率会低得多,但幸运的是我之前来过这里。 (OP 又问了同样的问题,这次是用自己的蛮力代码)
  • 我也投了赞成票。我实现了算法并且它有效:stackoverflow.com/a/35835138/2411320
猜你喜欢
  • 1970-01-01
  • 2016-06-20
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多