【问题标题】:array multidimensional primes check数组多维素数检查
【发布时间】:2019-06-04 09:29:25
【问题描述】:

我已经搜索过,但没有找到关于我要问的内容。作为初学者和学习 JavaScript 的学生,我有一个问题。我知道如何检查一个数字是否是素数。这是我的问题:

numbers([
  [5, 7, 10],
  [8, 2, 3],
  [44, 50, 22]
])

expected output:
[
  ['#', '#', 10],
  [8, '#', '#'],
  [44, 50, 22]
]

我需要的是:如果多维数组中有素数,我需要将其更改为#,如果没有,则没有任何变化。此任务不需要诸如.indexOf.include.findIndex.reduce.map.filter 之类的内置函数,也不需要添加新参数或正则表达式。这就是我到目前为止得到的:

function multidimensionalPrimesChecker(numbers)
{
    for (var i = 0 ; i < numbers.length ; i++)
    {
        for (var j = 0 ; j < numbers[i].length ; j++)
        {
            if (numbers[i][j] % i === 0)
            {
                return false;
            }
        }
    }
}

我不知道如何解决这个问题。请帮帮我。 谢谢你的好意

【问题讨论】:

  • 你为什么要使用i来执行module操作?你期望完成什么?
  • 您可以为此使用array.map()。如果为真,则返回数字,如果为假,则返回#
  • 我想他不能使用这个内置函数,因为他特别说“这个任务不需要内置函数,例如......地图......”
  • 是的,我的演讲说我们不需要使用内置函数,因为他希望我们理解逻辑

标签: javascript arrays multidimensional-array primes


【解决方案1】:

首先,您需要一个函数来检查一个数字是否为素数,因为您当前的检查numbers[i][j] % i === 0 只检查numbers[i][j] 是否可以被i 整除。下一个方法会做到这一点:

function isPrime(num)
{
    for(let i = 2, s = Math.sqrt(num); i <= s; i++)
        if(num % i === 0) return false;

    return num !== 1 && num !== 0;
}

现在,使用您的代码,您可以检测到此条件,并在条件为真时替换为 #

const input = [
    [5, 7, 10],
    [8, 2, 3],
    [44, 50, 22]
];

function isPrime(num)
{
    for(let i = 2, s = Math.sqrt(num); i <= s; i++)
        if(num % i === 0) return false;

    return num !== 1 && num !== 0;
}

function multidimensionalPrimesChecker(numbers)
{
    for (var i = 0; i < numbers.length; i++)
    {
        for (var j = 0; j < numbers[i].length; j++)
        {
            if (isPrime(numbers[i][j]))
                numbers[i][j] = "#";
        }
    }

    return numbers;
}

let res = multidimensionalPrimesChecker(input);
console.log(JSON.stringify(res));

【讨论】:

  • 谢谢,它有效。再次感谢您的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 2011-05-28
  • 1970-01-01
相关资源
最近更新 更多