Closed. This question is off-topic. It is not currently accepting answers. Learn more
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
如果我们列出10以下所有3或5的倍数的自然数,我们得到3、5、6和9。这些倍数之和是23。找出1000以下3或5的所有倍数之和。
所以我决定尝试在Euler站点上解决一些问题来改进编程当我试图解决第一个问题时,我写了一个快速的代码来计算和,它对10个数字起作用,但对于1000个数字,它告诉我答案:166833,这是错误的,我在这里找不到真正的问题如果有人能给我一个提示,让我改进我的算法,这样就行了。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Multiplies_of_3_and_5
{
  class Program
  {
    static void Main(string[] args)
    {
        int[] array = new int[7000];

        for (int j = 0; j<array.Length ;j++)
        {
            array[j] = j + 1;
        }

        int n = 1;
        int z = 1;
        int numbers = 0;

        for (int i = 0; i<999; i++)
        {
            if (array[i] == 3 * n )
            {
                n++;
                numbers += array[i];
            }

            else if (array[i] == 5 * z)
            {
                z++;
                numbers += array[i];
            }
        }
        Console.WriteLine(string.Join(" ", numbers));
        Console.ReadLine();
      }
   }
}

最佳答案

你应该读一下模运算符。

  static void main(String[] args)
  {
    int sum = 0;
    for(int i=1; i< 1000; i++){
      if (i % 3 == 0 || i % 5 == 0){
        sum += i;
      }
    }
    Console.WriteLine(sum);
  }

为了给出解释,模运算符在对值执行整数除法时给出余数。
例如,6%3==0(3等分6),7%3==1(7除以3剩下的1)。
所以要对3和5的所有倍数求和,只需检查该值是否被3或5等分(if语句),如果是,则将其添加到运行和中。
注意,当你得到3和5的倍数时,你的算法会出错在那种情况下你永远不会加z您还需要将其更改为总结一下:
直接使用循环变量,不需要预先填充另一个
数组或有单独的值来跟踪
在。
模是非常有用的。

关于c# - 欧拉计划1:找到1000以下的3或5的所有倍数的总和,适用于10个数字,但不适用于1000个数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47320171/

10-11 00:42