2014-05-03 36 views
2

當難倒根據行爲我敢肯定,這只是我是真的很愚蠢,但我寫的編程'是顯示的行爲,我只是無法理解。該計劃尋找1到10之間的所有數字都可以被整除的數字(這是項目歐拉解決方案的前身)。尋找倍數

我的代碼工作 - 這是在Python:

for i in range(1, 10000): 

    check = 1 

    for j in range(2, 10): 
     if i % j == 0: 
      continue 
     else: 
      check = 0 
      break 

    if check == 1: 
     print i 
     break 

並正確找到最低的這樣的數字是2520。我想這是更有效的,而且我認爲,如果你只是看它是否數字可以從6到10整除,你會測試同樣的事情。

然而,將其更改爲

for j in range(6, 10) 

,並返回504!我用C++和Python編寫了它們,它們都做同樣的事情 - 我真的不明白!這顯然是錯誤的 - 它顯然不能被10整除!

我不明白爲什麼我的代碼時,這是改變突然停止工作。我特別不明白爲什麼測試在6至10範圍內的倍數不是邏輯上等同於範圍爲2〜10。

對於那些更偏向於C++:

#include <iostream> 

using namespace std; 

int main(){ 

    for(int i = 1; i < 10000; i++){ 

     int check = 1; 

     for(int j = 6; j < 10; j++){ 

      if(i % j == 0){ 

       continue; 

      } else { 

       check = 0; 
       break; 

      } 

     } 

     if(check == 1){ 

      cout << i << endl; 
      break; 

     } 

    } 

} 
+0

'範圍(6,10)'不給你的想法。它會產生'[6,7,8,9]' – devnull

+0

詳細說明,爲了得到範圍爲'm'到'n'的數字(包括兩端),你需要'range(m,n + 1)'。 – devnull

+0

@ RaphaelMiedl的回答是正確的。另外,如果你使用的是Python 2.x,你應該使用''xrange''而不是''range'作爲循環。 ''range''生成實際的列表,''xrange''只是產生一個生成器,當你迭代它的時候它會生成列表中的數字,所以它更加高效,特別是對於大數字。 – aruisdante

回答

2

您的問題是range(6, 10)意味着所有從6開始並且最多但不包括10的數字。因此只有數字6,7,8,9。

range(2, 10)因爲它包括5以及其他包括的數字如6或8要求它被2隱形,所以你實際上得到了一個(隱含的)檢查,如果它被包含在10中, 10也不是range(2, 10)的一部分。

你可以寫range(5, 10)range(6, 11),它應該工作。

1

你缺少5

range9(1,10) == [1, 2, 3, 4, 5, 6, 7, 8, 9] 
range9(6,10) == [6, 7, 8, 9]