2013-08-05 31 views
3

我有一個簡單的家庭作業:寫一個腳本,打印所有的數字從1到N,這是不能被3和7在同一時間整除。我是否正確理解邏輯AND的工作方式?

所以,這是我的解決方案。它的工作方式 - 它打印的所有數字除以3或7而不是3和7.請幫助我理解爲什麼這是不正常的,因爲我需要。下面是代碼:

<!DOCTYPE html> 
<html> 
<head> 
    <title>Loops - Task 2</title> 
<link href="js-console.css" rel="stylesheet" /> 
</head> 
<body> 
    <label for="input_num">Start: </label> 
    <input type="text" id="input_num" /> 

    <a href="#" id="btn" onclick="printNums()">Print numbers</a> 

    <div id="js-console"></div>    
    <script src="js-console.js"></script> 
    <script> 
     var input_num; 
     var counter; 
     function printNums(){ 
      input_num = jsConsole.readInteger("#input_num"); 
      for (counter=1; counter<=input_num; counter++){ 
       if(counter % 3 !=0 && counter % 7 != 0){ 
        jsConsole.writeLine(counter); 
       } 
       } 
    } 
    </script> 
</body> 
</html> 
+5

亦稱_fizzbuzz_測試。 – Halcyon

+4

所以他們不能被21整除? :-) – xanatos

回答

2

爲了雙方整除,使用國防部21將返回0.這顯示在21,42,63等。

if(counter % 21 != 0){

編輯

<!DOCTYPE html> 
<html> 
<head> 
    <title>Loops - Task 2</title> 
<link href="js-console.css" rel="stylesheet" /> 
</head> 
<body> 
    <label for="input_num">Start: </label> 
    <input type="text" id="input_num" /> 

    <a href="#" id="btn" onclick="printNums()">Print numbers</a> 

    <div id="js-console"></div>    
    <script src="js-console.js"></script> 
    <script> 
     var input_num; 
     var counter; 
     function printNums(){ 
      input_num = jsConsole.readInteger("#input_num"); 
      for (counter=1; counter<=input_num; counter++){ 
       if(counter % 21 != 0){ 
        jsConsole.writeLine(counter); 
       } 
       } 
    } 
    </script> 
</body> 
</html> 

的方式MOD(%)的工作原理是,它會給你的除法的餘數。如果平均分配4/2 = 2,沒有任何遺留。但是,5/2仍然會返回2,剩餘1。由於你說它不能被3和7同時分割,所以你可以將你的兩個數字合在一起,以使用mod和第一個可分解的數字由圖3和7一起是21.

+0

這沒有奏效,也許是因爲我不懂mod。 if(counter%3!= 0 && counter%7!= 0){'with'if(counter%21!= 0){'? – maniuni

+0

@ user2025846查看我的編輯部分 – ObieMD5

0
if((counter % 3) !=0 && counter % 7 != 0) 

應該是:

if (!((counter % 3) ==0 && counter % 7 ==0)) 

或剛剛與21尖去...

0

如果(計數器%3!= 0 & &計數器%7!= 0)

這意味着,如果數量可以除以3然後counter%3!=0是假,所以條件是錯誤的。 (與7相同)。

1

「是不是在同一時間通過3和7整除」是指

!(x % 3 == 0 && x % 7 == 0) 

或者,如果我們應用De Morgan's law

x % 3 != 0 || x % 7 != 0 
+0

很好的使用布爾邏輯:D – ObieMD5

1

如果我理解正確的分配要打印出來不會被3和7分割的數字,但可以被一個或一個分割。 IE 3和IE 7將打印出來,因爲它們可以被一個而不是另一個分割,但是21將不會被打印,因爲它們被兩者分開。

在這種情況下,邏輯應該是這樣:

如果(!((計數器%3)== 0 & &(計數器%7)== 0))