【问题标题】:Solve Project Euler challenge #1 using only LINQ仅使用 LINQ 解决 Project Euler 挑战 #1
【发布时间】:2013-12-24 12:55:57
【问题描述】:

Project Euler 的problem #1 基本上涉及找到所有小于 1000 且可被三或五整除的数字的总和。如果有某种预先存在的列表包含 1 到 999(含)之间的所有整数,那么使用 LINQ 将非常简单。

LINQ 有生成整数序列的内置方法吗?

【问题讨论】:

  • 但是你能不用使用Enumerable.Range解决这个问题吗?
  • @Rubens Farias:您是在问我是否可以在不使用 Range 的情况下使用 LINQ?如果是这样,那么没有。我最初使用命令式风格解决了它。在这个过程中,我突然想到,如果可以使用 LINQ,它可能是单行的。
  • 我建议你尝试在没有循环或序列的情况下解决这个问题。
  • @Rubens Farias:使用递归?
  • @Rubens Farias:我刚刚创建了一个相当简单的数学公式来解决它。这是你暗示的方法吗?

标签: c# .net linq functional-programming


【解决方案1】:

您可以链接 LINQ Enumerable.Range(获取起始索引和您需要的数字数量)、Where 与您的两个条件和 Sum 一起。

% == 0(模运算符)确保您的数字可以被另一个数字整除。

这给出了以下 LINQ 单行:

Enumerable.Range(0, 1000).Where(number => number % 3 == 0 || number % 5 == 0).Sum();

【讨论】:

  • 我故意没有给出完整的答案,所以发帖者可以体验自己解决问题的快感......
【解决方案2】:

你想要Enumerable.Range 方法:

IEnumerable<int> seq = Enumerable.Range(1, 999).Select(x => x);

创建一个正方形序列:

IEnumerable<int> squares = Enumerable.Range(1, 10).Select(x => x * x);

奇数序列:

IEnumerable<int> oddNumbers = Enumerable.Range(1, 100).Where(x => x % 2 != 0);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-13
    相关资源
    最近更新 更多