所以我启动了Euler项目并且第一个问题非常简单,但我无法得到答案,因为我创建的程序没有运行。它编译得很好,但是当我运行它时,它永远不会运行。项目Euler表示,“有效实施的问题将允许在不到一分钟的时间内在适度的计算机上获得解决方案。”这引出了我的问题。我是否陷入了无限循环或者我的电脑无法运行我的程序?
问题是:如果我们列出10以下的所有自然数是3或5的倍数,我们得到3,5,6和9.这些倍数的总和是23.
查找低于1000的3或5的所有倍数的总和。
public class Euler1
{
public static void main(String[] args)
{
double x = 1;
int count = 0;
int total = 0;
while( x < 1000)
{
if((x/3 == (int)x) || (x/5 == (int)x))
{
count++;
x++;
total += x;
}
}
System.out.println(total);
}
}
答案 0 :(得分:5)
你的节目错了。
while( x < 1000)
{
if((x/3 == (int)x) || (x/5 == (int)x))
{
count++;
x++;
total += x;
}
}
请注意,如果条件为真,则x仅递增。 x从1开始,因此条件不为真,因此x永远不会增加并保持为1。
此外,x/3 == (int)x
和x/5 == (int)x
不是正确的可分性测试。除非x为0,否则它们都不是真的。
答案 1 :(得分:2)
问题是,如果if
循环中while
条件为假,则x
永远不会增加......
(除非x
为0)否则它将永远为假。
答案 2 :(得分:1)
你陷入无限循环。永远不会调用你的if语句,因为除非x
为0
,否则它永远不会返回true,因此你的x
变量永远不会被递增。我建议查看%
(模数)运算符来解决这个问题。