http://projecteuler.net/problem=1
嘿。我是一名高中生,想要很好地掌握编程问题,所以我访问了Project Euler。对于问题1,我用Java编写了一些可以解决它的代码,但是显然出现了问题。我可以获得一些关于什么的见解吗?
说明: 我在索引值332处停止所有内容,因为Java从0开始计数,而333 * 3是999,低于1,000。苹果是一个单独的类,具有几乎相同的代码,虽然它的数量为5.最后,我手动将两个答案加在一起,但它不对。我究竟做错了什么? 两个最终的总和是:
三:164838
五:97515
public class Learning {
public static void main(String[] args){
int three[] = new int[333];
int counter = 0;
three[332] = 0;
int totalthree = 0;
int threeincrementer = 1;
int grandtotal;
boolean run = true;
boolean runagain = true;
for (counter = 1; counter<=332; counter++){
three[counter] = 3 * counter;
if (!(three[332] == 0)){
System.out.println("Finished three.");
while (run == true){
totalthree = totalthree + three[threeincrementer];
threeincrementer++;
if (threeincrementer >= 332){
run = false;
System.out.println("Three final is: " + totalthree);
}
}
}
if (runagain == true){
apples ApplesObject = new apples();
ApplesObject.rerun(0);
runagain = false;
}
}
}
}
答案 0 :(得分:1)
有些数字同时是3和5的乘法,如15,所以你不应该分别计算3的乘法和5的乘法之和,而是加上它们,因为你最终会做类似的事情
sum3 = 3,6,9,12,15,...
sum5 = 5,10,15,...
所以首先sum3
将包含15,sum5
也会包含它,这意味着您将添加15次。现在要平衡您的计算,您需要从sum3+sum5
总和中减去所有乘以15的总和
sum15 = 15,30,45,...
因此,使用您的方法,您的最终公式应该看起来像sum3+sum5-sum15
。
但是这个问题的简单解决方案可能看起来像
sum = 0
for each X in 1...999
if (X is multiplication of 3) OR (X is multiplication of 5)
add X to sum
要检查某个数字X是否是数字Y的乘法,您可以使用modulo运算符%
(示例reminder = X % Y
)查找一个数字除以另一个数字的余数。
您可以找到更多Java运算符here