如何以最少的步骤增加 (0,0,0) 的值以生成给定数组

how to increment the values of (0,0,0) in minimal steps to make given array

根据问题,我们给出了一个包含 3 个元素的数组 N[a,b,c] 给定 a>0 ,b>0,c>0.We 必须按照给定的规则使数组 X=[0,0,0] 到 N。递增 X 的规则由

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

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

  3. 您不应将 X 的值增加到超过 N
  4. 中的相应值
  5. 数一数您在 X 上完成的增量数,然后 return 得出答案。
  6. 如果我们无法将数组 X 变为 N。打印更接近 N 的 X 的可能数组,即数组中相应元素之间的差异应尽可能小

例如:

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]

现在有没有什么方法或直接公式可以有效地解决这个问题。提前致谢 。抱歉我的解释和标题不好

提示:您想达到 (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) 的应用次数,yz 也是如此。于是

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

给予

x = (a + b - c) / 2
y = (c - b + a) / 2
z = (b - a + c) / 2

xyz必须都是 >= 0 和整数。

结果是 xyz 的总和。

执行此操作的程序就在您身边。提示:

  • 显示一行要求用户输入 abc(参见 printfscanf
  • 根据以上等式计算 xyz 的值
  • 检查它们是否 >= 0 和整数(如果不显示这是不可能的并停止)
  • 计算x+y+z并将结果显示为解决方案