如何停止添加在C#中出现两次的数字

Row*_*wan 0 .net c# math visual-studio-2010

所以我试图找到问题的答案:

如果我们列出10以下是3或5的倍数的所有自然数,我们得到3,5,6和9.这些倍数的总和是23.找到低于1000的3或5的所有倍数的总和.

我正在使用C#并且非常清楚要做什么,但是我的代码一直在计算出现两次的数字(例如15,30),我想知道最快/最简单的方法来抵消它.我到目前为止所发现的一切都是用不同的语言,所以如果这对你来说相对容易,我很抱歉.这是我到目前为止:

static void Main(string[] args)
    {
        var result1 = 0;
        var result2 = 0;
        var result3 = 0;
        var uniqueInts3 = new List<int>();
        for (var i = 0; i < 1000; i += 3)
        {
            uniqueInts3.Add(i);
            result1 += i;
        }
        var uniqueInts5 = new List<int>();
        for (var o = 0; o < 1000; o += 5)
        {
            uniqueInts5.Add(o);
            result2 += o;
        }
        result3 += result1 + result2;
        Console.WriteLine(result3);
        Console.ReadLine();
    }
Run Code Online (Sandbox Code Playgroud)

如果有人可以向我解释该怎么做,我会很高兴,因为我现在还不确定.

Kam*_*ski 6

不是最有效的方式,但应该工作

var sum = 0;

for(int i=0;i<1000;i++)
{
   if(i%3==0||i%5==0) //checks if something is multiple of 3 or 5
      sum+=i; // sums only when it's multiple of 3 or 5
}
Run Code Online (Sandbox Code Playgroud)

它省略了某些事物是3和5的倍数的情况.每个数字都需要一次.

一行linq方式:

var sum = Enumerable.Range(3, 1000).Sum(x => (x % 3 == 0 || x % 5 == 0) ? x : 0);
Run Code Online (Sandbox Code Playgroud)

最快的数学方法版本:

var result = SumDivisbleBy(3,999)+SumDivisbleBy(5,999)-SumDivisbleBy(15,999);

private int SumDivisbleBy(int n, int p)
{
    return n*(p/n)*((p/n)+1)/2;
}
Run Code Online (Sandbox Code Playgroud)

它计算所有可被3和5整除的数字的总和,然后减去可被15整除的数字的总和.说明:http://www.wikihow.com/Sum-the-Integers-from-1-to-N


Dzm*_*voi 5

var sum = Enumerable.Range(1, 1000)
          .Where(i => i % 3 == 0 || i % 5 == 0)
          .Sum();
Run Code Online (Sandbox Code Playgroud)