如何以最少的步骤增加 (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 的规则由
给出
每次您可以将 X 的任意两个值递增 1 例如:[0,1,1](或)[1,0,1]
不允许在 X 中一次只增加一个值或三个值
- 您不应将 X 的值增加到超过 N
中的相应值
- 数一数您在 X 上完成的增量数,然后 return 得出答案。
- 如果我们无法将数组 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)
的应用次数,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
和x
、y
和z
必须都是 >= 0 和整数。
结果是 x
、y
和 z
的总和。
执行此操作的程序就在您身边。提示:
- 显示一行要求用户输入
a
、b
和 c
(参见 printf
和 scanf
)
- 根据以上等式计算
x
、y
和 z
的值
- 检查它们是否 >= 0 和整数(如果不显示这是不可能的并停止)
- 计算
x+y+z
并将结果显示为解决方案
根据问题,我们给出了一个包含 3 个元素的数组 N 让 [a,b,c] 给定 a>0 ,b>0,c>0.We 必须按照给定的规则使数组 X=[0,0,0] 到 N。递增 X 的规则由
给出每次您可以将 X 的任意两个值递增 1 例如:[0,1,1](或)[1,0,1]
不允许在 X 中一次只增加一个值或三个值
- 您不应将 X 的值增加到超过 N 中的相应值
- 数一数您在 X 上完成的增量数,然后 return 得出答案。
- 如果我们无法将数组 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)
的应用次数,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
和x
、y
和z
必须都是 >= 0 和整数。
结果是 x
、y
和 z
的总和。
执行此操作的程序就在您身边。提示:
- 显示一行要求用户输入
a
、b
和c
(参见printf
和scanf
) - 根据以上等式计算
x
、y
和z
的值 - 检查它们是否 >= 0 和整数(如果不显示这是不可能的并停止)
- 计算
x+y+z
并将结果显示为解决方案