我有一个数字在10到30之间,我需要在4次加法或减法操作中显示这个数字,但两者都应至少存在一次,所以我们总是需要至少使用加法和减法一次。
以下是一个例子:
我需要生成的数字是21:5 + 6,8-5,9-4,1 + 1(11 + 3 + 5 + 2)= 21(或任何其他组合等于21)
我需要为10到30之间的任何数字生成4个操作
任何人都可以帮助我吗?
如果您有Java,C#或VB样本,它对我有用。
答案 0 :(得分:1)
答案 1 :(得分:1)
我曾经找到过关于此的正确解决方案。但遗憾地忘记了。但我发现的是通过使用LINQ与随机运算符混合来获得IEnumerable和.First()的所有可能性来实现魔法。
答案 2 :(得分:1)
也许是这样的,定制它以满足您的需求:
Random rn = new Random();
int a, b, c, d;
int min = 3, max = 10;
int desired = 30;
while
(
(
(a = rn.Next(min, max))
+ (b = rn.Next(min, max))
+ (c = rn.Next(min, max))
+ (d = rn.Next(min, max))
)
!= desired
) { }
int x = rn.Next(-1* (a - 1 ), a - 1);
int y = rn.Next(-1 * (b - 1), b - 1);
int z = rn.Next(-1 * (c - 1), c - 1);
int v = rn.Next(-1 * (d - 1), d - 1);
string result =
(x >= 0 ? (a - x) + "+" + x : (a + -1 * x) + "-" + -1 * x) + " + " +
(y >= 0 ? (b - y) + "+" + y : (b + -1 * y) + "-" + -1 * y) + " + " +
(z >= 0 ? (c - z) + "+" + z : (c + -1 * z) + "-" + -1 * z) + " + " +
(v >= 0 ? (d - v) + "+" + v : (d + -1 * v) + "-" + -1 * v);