前100个自然数之和

The sum of the first natural 100 numbers

编码新手, 快速家庭作业问题我遇到了麻烦。 我必须找到前 100 个自然数的总和。 1+2+3+4,等等。使用“while 循环”时。

这是我目前所拥有的。

    Dim sum, count As Integer
    Const num As Integer = 1

    Console.WriteLine("The Sum of the first 100 natural numbers is:") 

 

    count = num + 1

    While count <= 100 
        Count = num + count
        
    End While
        Sum = count

    Console.WriteLine("{0}", sum) 
    Console.ReadLine()

我知道数学和 while 循环不正确,但我不确定如何修复它。我的答案一直是 101。

While count <= 100 
    num += count
    count += 1        
End While
    Sum = num

您不需要 num 常量和行:count = num + 1

 While count <= 100
    sum += count
    count += 1
 End While

我知道您正在学习,解决方案必须使用 While 循环,但为了好玩,看看您可以用 2 行代码做什么。

    Dim arrNumbers = Enumerable.Range(1, 100).ToArray
    Console.WriteLine(arrNumbers.Sum)

由于您的问题标题要求所有 [1 - 100] 的总和以及偶数和赔率,这里是每个的一些 LINQ

Dim sum = Enumerable.Range(1, 100).Sum()
Dim sumEvens = Enumerable.Range(1, 100).Sum(Function(i) If(i Mod 2 = 0, i, 0))
Dim sumOdds = Enumerable.Range(1, 100).Sum(Function(i) If(i Mod 2 = 0, 0, i))
Console.WriteLine($"Sum: {sum}, Sum evens: {sumEvens}, Sum odds: {sumOdds}")

Sum: 5050, Sum evens: 2550, Sum odds: 2500

Enumerable.Range(1, 100) 创建所有 [1 - 100] 的序列。调用 LINQ 函数 Sum 来简单地获取总和,或者您可以将 lambda 函数传递给 Sum 以转换数字。使用 Mod 到 select 偶数或赔率。上面的方法将偶数的赔率设置为 0,将赔率设置为 vice-versa。

这种转换序列方法的替代方法是仅使用 Where 到 select 偶数然后 Sum,这可能更具可读性。

Dim sumEvens = Enumerable.Range(1, 100).Where(Function(i) i Mod 2 = 0).Sum()

使用您的代码,您以一种奇怪的方式做了一些事情。

让我们简化代码,看看哪里出了问题。

首先,您将 num 设置为 1 的值的常量。由于它没有变化,我们将直接输入值。

然后你会得到这个:

count = 1 + 1

While count <= 100
    count = 1 + count
End While

sum = count

所以这意味着 count 将从 2 开始并增加一个 ,直到 count 的值大于 100 - 那就是 101.

然后将 sum 设置为 count 并得到 101

您需要做的是将 count 启动为 1,然后对循环内的值求和。

count = 1

While count <= 100
    sum = sum + count
    count = count + 1
End While

这给出了 5050 的正确结果。