小编典典

欧拉计划:问题1(可能的重构和运行时优化)

algorithm

我听说过很多有关Euler项目的信息,所以我认为我可以解决C#中的问题之一。网站上指出的问题如下:

如果我们列出所有低于10的自然数,它们是3或5的倍数,则得到3、5、6和9。这些倍数的总和为23。

找出1000以下3或5的所有倍数的总和。

我编写了如下代码:

  class EulerProblem1
    {
        public static void Main()
        {
            var totalNum = 1000;
            var counter = 1;
            var sum = 0;

            while (counter < totalNum)
            {
                if (DivisibleByThreeOrFive(counter))
                    sum += counter;

                counter++;
            }

            Console.WriteLine("Total Sum: {0}", sum);
            Console.ReadKey();
        }

        private static bool DivisibleByThreeOrFive(int counter)
        {
            return ((counter % 3 == 0) || (counter % 5 == 0));

        }
    }

最好用较少的冗长/更简洁的语法和更好的优化来获得关于替代实现的一些想法。想法可能从快速,肮脏到带出大炮消灭蚊子,不一而足。目的是探索计算机科学的深度,同时尝试改善这一特别琐碎的代码片段。

谢谢


阅读 268

收藏
2020-07-28

共1个答案

小编典典

使用LINQ(根据注释中的建议进行更新)

static void Main(string[] args)
{
    var total = Enumerable.Range(0,1000)
                    .Where(counter => (counter%3 == 0) || (counter%5 == 0))
                    .Sum();

    Console.WriteLine(total);
    Console.ReadKey();
}
2020-07-28