2014-01-17 43 views
-1

这就是问题:项目欧拉#5的Javascript

2520是能够由每个号码而没有任何剩余被划分为1〜10的最小数目。 可以被1到20的所有数字均分的最小正数是多少?

这里是我的代码:

var calculation = function(){ 
     var result = 0; 
     for(var i = 20; i == 10000000000000; i++){ 
       for(var e = 2; e == 20; e++){ 
         if(i % e == 0){ 
           result = i; 
         } 
       } 
     } 
     alert(result);  
} 
calculation(); 

的问题是,该方案只是输出0

回答

2

有更多优雅的方法来解决这个问题,但为了解决当前的问题,for -loop的'条件'部分需要返回true当你想要继续循环,而不是当你想要停止它时。所以,你的for循环应该是这样的:环

for(var i = 20; i <= 10000000000000; i++){ 
    for(var e = 2; e <= 20; e++){ 
     ... 
    } 
} 

里面,你已经得到了另一个问题。如果i % e == 0您正在设置result,但您从未定义过停止状态。换句话说,result将成为通过该测试的最后一个数字,即使其未通过ie的所有其他测试。你不得不做这样的事情:

for(var i = 20; i <= 10000000000000; i++){ 
    bool found = true; 
    for(var e = 2; e <= 20; e++){ 
     if (i % e != 0) { 
      found = false; 
      break; // stop testing other divisors 
     } 
    } 
    if (found) { 
     return i; 
    } 
} 
+0

我在想,如果有一个更好的方式来做到循环。我应该使用for循环内的while循环吗? – user2406223

+1

@ user2406223 *提示:*一个更好的解决方案是从一个小数字开始,比如说'2',并从这里开始构建您的解决方案。请注意,所有可以被2整除的数字n也可以被2整除成n-1。 –

+0

两个不能解决。它必须高于20. – user2406223

1

在这一行:

 for(var i = 20; i == 10000000000000; i++){ 

i == 10000000000000位意味着该循环仅应只要i等于运行10000000000000 —这不可能是,因为它已经不是那个开始。

我想你打算写i <= 10000000000000

(还有其他的问题,你的代码以及—我建议使用用于调试的数量少得多,这样你就可以计算出来没有崩溃您的浏览器—但应该让你开始。)

-1

呀先,选择一种适合解决这些问题的语言。我敢肯定,在每种语言中,for循环条件==并不意味着小于或等于,因此可能首先研究任何编程语言的基础知识。

其次,假设你在for循环中加入了<=,那么你的内循环逻辑是有缺陷的。如果你是新的,那么最合理的方式来做到这一点是写东西,这样做的效果:

if (i%2==0 && i%3==0 && i%4 == 0 && ... && i%20==0) 
    alert(i);` 

一种方式实现这一目标是使用一个布尔值的帮助下,你可以这样做这个:

for (var i=20; i<=1000000000; i++) { //Your upper bound is wayy too high. 
    var done = true; 
    for (var e = 2; done && e <= 20; e++) { //Be more efficient. 
    done = done && (i % e == 0); 
    } 
    if (done) { 
    alert(i); 
    return; 
    } 
} 
+0

尼斯downvote。谨慎解释? – Sanchit