3

我有一个简单的家庭作业:编写一个脚本,打印从 1 到 N 的所有数字,这些数字不能同时被 3 和 7 整除。

所以,这是我的解决方案。它的工作方式 - 它打印所有除以 3 或除以 7 而不是 3 AND 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>
4

5 回答 5

2

为了被两者整除,使用 mod 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 余数。2 进入 4, 2 次均匀地剩下 1 因此:4%2 = 0 5%2=1 既然你说它不能同时被 3 和 7 整除,你可以将你的两个数字相乘以使用 mod 和第一个数字可被 3 整除7加起来就是21。

于 2013-08-05T12:08:26.877 回答
1

“不能同时被 3 和 7 整除”是指

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

或者,如果我们应用德摩根定律

x % 3 != 0 || x % 7 != 0
于 2013-08-05T12:19:54.470 回答
1

如果我正确理解分配,您想要打印出不会除以 3 和 7 但可以除以其中之一或不除的数字。IE 3 和 7 将打印出来,因为它们可以被一个除而不是另一个,但是 21 不会打印,因为它被两个除。

在这种情况下,逻辑应该是:

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

于 2013-08-05T12:25:50.217 回答
0

if(计数器 % 3 !=0 && 计数器 % 7 != 0)

这意味着如果数字可以除以 3counter%3!=0则为假,因此条件为假。(与 7 相同)。

于 2013-08-05T12:16:23.187 回答
0
if((counter % 3) !=0 && counter % 7 != 0)

应该 :

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

或者只是使用 21 小费...

于 2013-08-05T12:04:44.953 回答