我的代码似乎不适用于项目Euler,问题1。该问题声明:
如果我们列出所有低于10的自然数,它们是3或5的倍数,我们得到3,5,6和9。这些倍数之和是23。 找出低于1000的3或5倍数之和。
我的程序的输出是
266333
我的代码是:
private static final int max = 1000;
private static int sum;
public static void main(String[] args)
{
addMultiples(3);
addMultiples(5);
System.out.println(sum);
}
private static void addMultiples(int mult)
{
int x = mult;
while(x < max)
{
sum += x;
x += mult;
}
}似乎数学的基本原理只是在逃避我,如果我找不到这样一个简单问题的解决方案的话,这真的会阻碍我成为一名程序员。
发布于 2014-01-20 04:41:15
首先,最重要的是,不会气馁,。这只是一个问题,它是一个非常糟糕的指标,作为一个程序员的潜力。只要继续练习,不管怎么说,你的错误更多的是数学而不是编程。
如果我们列出3小于16的倍数,我们得到: 3,6,9,12,15。如果我们列出5小于16的倍数,我们得到: 5,10,15。
看到问题了吗?
你数了十五次。您可能会找到实现,所以我不会给您代码。那不会让你好起来的。
而且,这个问题可以用数学和和更有效地解决,但我会留给你们。
发布于 2014-01-20 04:39:57
您所犯的错误是将3和5的倍数相加,类似于15倍。
public static void main(String[] args) {
long sum = 0;
for(int i = 0; i <= 1000; i++) if(i%3==0 || i%5==0) sum += i;
System.out.println(sum);
}发布于 2014-01-20 04:38:49
这里有个小错误。
15是5的倍数,3的倍数。
您可以做的一件事(这是我的功能方面)是创建一个从0到最大的列表。然后创建一个方法,取出所有3的倍数,并将它们添加到结果列表中,并从输入列表中删除它们。这个现在被剪裁的列表被传递给一个方法,该方法过滤掉5的所有倍数,并将它们添加到相同的输出列表中。
你取你的清单之和。
编辑: Johannes Trümpelmann的解决方案很短,可读性更强,而且性能更好,所以您可能需要使用该解决方案。:)
https://stackoverflow.com/questions/21226309
复制相似问题