C#适合那些擅长数学的人

时间:2010-12-22 16:25:58

标签: c# java vb.net

我有一个数字在10到30之间,我需要在4次加法或减法操作中显示这个数字,但两者都应至少存在一次,所以我们总是需要至少使用加法和减法一次。

以下是一个例子:

我需要生成的数字是21:5 + 6,8-5,9-4,1 + 1(11 + 3 + 5 + 2)= 21(或任何其他组合等于21)

我需要为10到30之间的任何数字生成4个操作

任何人都可以帮助我吗?

如果您有Java,C#或VB样本,它对我有用。

3 个答案:

答案 0 :(得分:1)

作业?

您可以尝试将其拆分为两个操作:

  • 将目标号码写为4个数字的总和
  • 将这些数字写为加法或减法。

你知道System.Random吗?您可以使用它来生成一些数字,然后尝试使它们“适合”。

答案 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);