所以我开始了欧拉项目,第一个问题非常简单,但是我无法得到答案,因为我创建的程序没有运行。它编译得很好,但是当我运行它时,它永远不会运行。欧拉项目说,"有效实施的问题将允许在不到一分钟的时间内在适度功率的计算机上获得解决方案。这就引出了我的问题。我是否陷入了无限循环,或者我的计算机无法运行我的程序?
问题是:如果我们列出所有低于 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);
}
}
你的程序是错误的。
while( x < 1000)
{
if((x/3 == (int)x) || (x/5 == (int)x))
{
count++;
x++;
total += x;
}
}
请注意,x 仅在条件为 true 时才递增。x 从 1 开始,因此条件不为 true,因此 x 永远不会递增并保持在 1。
此外,x/3 == (int)x
和x/5 == (int)x
不是正确的可分性测试。除非 x 为 0,否则它们都不是真的。
问题是,如果你的if
条件在while
循环中是假的,x
永远不会递增......
(除非x
为 0,否则它将始终为假)
你陷入了一个无限循环。你的 if 语句永远不会被调用,因为它永远不会返回 true,除非x
是0
,因此你的x
变量永远不会递增。我建议研究这个问题的%
(模)运算符。