如何在最小步骤中递增(0,0,0)的值以生成给定数组

时间:2017-12-04 23:00:00

标签: arrays algorithm math computational-geometry

根据问题,我们给出了一个数组 N 的3个元素,让 [a,b,c] 给出a> 0,b> 0,c> 0 。我们必须按照给定的规则将数组 X = [0,0,0] 设为N.增加X的规则由

给出
  1. 每次你可以将X的任意两个值递增1例如:[0,1,1](或)[1,0,1]

  2. 不允许在X中一次只增加一个值或三个值

  3. 您不应将X的值增加到大于N
  4. 中的相应值
  5. 计算您在X上完成的增量数并返回答案。
  6. 如果我们不能将数组X设为N.打印可能更接近N的X数组,即数组中相应元素之间的差异应尽可能小
  7. 例如:

    1) given N=[6,6,6]
    

    步骤进行:

    [0,1,1] -> [0,2,2] -> [0,3,3] -> [1,4,3] -> [2,5,3] -> [3,6,3] -> [4,6,4] ->[5,6,5] -> [6,6,6]
    

    步数为9

    2) given N=[6,6,7]
    

    步骤进行:

    [0,1,1] -> [0,2,2] -> [0,3,3] -> [1,4,3] -> [2,5,3] -> [3,6,3] -> [4,6,4] ->[5,6,5] -> [6,6,6].
    

    从这里我们不能增加数组,因为它违反了规则。 difference [6,6,7] and [6,6,6] is 1 . so [6,6,6]是给定N

    的最佳答案
    3) given N=[0,0,7] 
    

    我们不能增加X的任何两个值。所以答案是[0,0,0] for [0,0,7]

    现在有任何方法或任何直接公式以有效的方式解决这个问题。提前致谢 。对不起我的不良解释和头衔

1 个答案:

答案 0 :(得分:4)

提示:您希望像onClickFunction(itemParam) { console.log("this is itemParam", itemParam); var x = itemParam.requested_filepath; this.x = itemParam.requested_filepath; } 一样触及(a,b,c)
请将此因素纳入等式

(6,6,6)

x(1,1,0) + y(1,0,1) + z(0,1,1) = (a,b,c) 是应用x的次数,(1,1,0)y的类似情况。因此

z

x + y = a
x + z = b
y + z = c

x = (a + b - c) / 2 y = (c - b + a) / 2 z = (b - a + c) / 2 xy必须全部为> = 0和整数。

结果是zxy的总和。

这样做的计划就在你身边。提示:

  • 显示一行,要求用户输入zab(请参阅cprintf
  • 根据以上公式计算scanfxy的值
  • 检查他们是否> = 0和整数(如果没有显示这是不可能的并停止)
  • 计算z并将结果显示为解决方案