【问题标题】:How can I create a function that appends an empty array?如何创建一个附加空数组的函数?
【发布时间】:2021-05-28 13:37:03
【问题描述】:
// I am attempting to answer the following question:

如果我们列出所有小于 10 且是 3 或 5 倍数的自然数,我们会得到 3、5、6 和 9。这些倍数之和是 23。

//Find the sum of all the multiples of 3 or 5 below 1000.



// function creating both integers, max number, and filtering 
func sumOfMultiples(x: Int, y: Int, n: Int)  {
    var numberList: [Int] = []
    for i in 0..<y {
        if x < n && y < n && x % n == 0 || y % n == 0 {
            return numberList.append(i)
        }
    
    } 
}


sumOfMultiples(x: 3, y: 5, n: 1000)

【问题讨论】:

  • 不要使用 return return。你在哪里求和?
  • 解决PE #1?
  • 要求记录所有号码的列表吗?如果不是,您可以在每次循环时继续添加“总和”并返回它
  • 您能否详细说明需要在何处以及为什么需要附加一个空数组?最坏的情况是你可以声明一个 [Any] 类型的数组,然后只需 append([])
  • @MartinR 是的!!!我目前正在通过 exercism.io 工作

标签: arrays swift function


【解决方案1】:

我不确定您的代码试图实现什么,但由于多种原因它无法工作。

下面是一些实现此目的的工作代码:

func sumOfMultiples(x: Int, y: Int, n: Int)->Int {
    var returnValue: Int = 0

    if x < n && y < n {
        for i in 0..<n {
            if i % x == 0 || i % y == 0 {
                returnValue += i
            }
        }
    }

    return returnValue
}

print(sumOfMultiples(x: 3, y: 5, n: 1000))

输出:

233168

您发布的代码中的问题是:

  • 该函数没有返回类型(它是一个 void 函数)。我添加了-&gt;Int 以返回一个整数。
  • 该函数存储整数列表 - 为什么?如果只需要总和,请将值存储在 Int 中并返回。
  • for 循环一直循环到y。其实应该是n
  • 在每个循环迭代中执行xy 低于n 的比较。无需浪费资源 - 在循环之前完成。
  • 模运算(x % ny % n)对用例无效。实际上是i % xi % y,因为您在每种情况下都在测试i

【讨论】:

  • 不需要检查x &lt; n &amp;&amp; y &lt; n。还有一个专门的方法isMultiple(of:)来检查除数。
  • 马丁,你没有帮助 OP 提出解决方案,你给了他们一个完整的解决方案。这听起来像是一个家庭作业,如果你只提供一个完整的答案,OP 就学不会。
【解决方案2】:

如果你想要的结果是所有数字的总和:

func sumOfMultiples(x: Int, y: Int, n: Int) -> Int {
    var result = 0
    for number in 1..<n {
        if number % x == 0 || number % y == 0 {
            result += number
        }
    }
    return result
}

如果你想要的结果是一个包含所有数字的数组:

func arrayOfMultiples(x: Int, y: Int, n: Int) -> [Int] {
    var result: [Int] =  []
    for number in 1..<n {
        if number % x == 0 || number % y == 0 {
            result.append(number)
        }
    }
    return result
}

您也可以使用自定义范围作为参数,如下所示:

func sumOfMultiples(x: Int, y: Int, n: ClosedRange<Int>) -> Int {
    var result = 0
    for number in n {         //Notice the change from 1..<n to just n
...
}

func arrayOfMultiples(x: Int, y: Int, n: ClosedRange<Int>) -> [Int] {
    var result: [Int] =  []
    for number in n {         //Notice the change from 1..<n to just n
...
}

然后这样称呼它:

sumOfMultiples(x: 3, y: 5, n: 10...20)
//Result is 75

arrayOfMultiples(x: 3, y: 5, n: 10...20)
//Result is [10, 12, 15, 18, 20]

【讨论】:

  • 非常感谢!!!!!!!非常感谢您花时间向我展示如何使用数组和 sum 来解决这个问题。您还刚刚向我介绍了自定义范围 - 谢谢!
猜你喜欢
  • 2023-03-16
  • 2019-02-16
  • 1970-01-01
  • 2020-10-11
  • 2020-07-03
  • 2019-02-28
  • 1970-01-01
  • 2017-07-22
  • 2012-09-26
相关资源
最近更新 更多