algorithm - 编写一个程序来测试给定数字是否是 Scheme 中不同平方的和

标签 algorithm sum scheme racket

在上次考试中,我们必须编写程序来确定给定数字是否可以写成不相等数字的平方数之和。 最小的正方形必须是 2^2,而不是 1^2

例如- 给定的数字是 13 -> true 因为 13 被重写为 2^2 + 3^2 如果给定数字是 8 -> false,因为 8 是 2^2 + 2^2,它是等平方和。

我一直在寻找正确的算法。例如,我将得到 65 号。我有一个想法来编写帮助程序“正方形”,它总是找到给定数字(从 2^2 开始)到给定数字或大于 65 的平方。因此,例如 65,它会找到2^2 3^2 4^2 5^2 6^2 7^2 8^2 现在我不知道如何测试所有正方形组合的总和是否会给出答案 65。答案应该是#true因为 4^2 和 7^2 的结果是 65

编辑 1:

这段代码是我写的。它没有给出正确的结果 (sum-sq 17) -> 真

(define (sum-sq n)
  (sum-sq-help n 2))

(define (sum-sq-help n i)
  (if (or (= (sqr i) (/ n 2)) (= n 0))          
      #f
      (if (integer? (sqrt (- n (sqr i)))) #t (sum-sq-help n (+ 1 i)))))

编辑 2:更新 - 这工作正常

(define (sum-sq n)
  (sum-sq-help-2 n 2))

(define (sum-sq-help-2 n i)
    (cond ((= (sqr i) (/ n 2)) #f)
          ((< n (sqr i)) #f)
          ((= 1 (- n (sqr i))) #f)
          ((integer? (sqrt (- n (sqr i)))) #t)
          (else (sum-sq-help-2 n (+ 1 i)))))

最佳答案

Input: n
Output: Is n a sum of squares?

Algorithm:
1.  xs := {i^2 | 1<i^2<n}
2.  x  := n
3.  loop
      if  x<=1     then return false as the final result
      if  x in xs  then return true  as the final result
      x := x - (largest number in xs smaller than x)
    endloop

关于algorithm - 编写一个程序来测试给定数字是否是 Scheme 中不同平方的和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54549369/

相关文章:

javascript - 如何用javascript对多个(未定义的数字)文本框的数字求和?

macros - 以编程方式填写 Scheme 中的 letrec。宏还是评估?

list - 在方案中创建列表的排列

scheme - Racket 开始形式

algorithm - 给定一个 DCEL,我如何找到最近的一对站点?

来自别名表的 MySQL Sum

java - "Count Complete Tree Nodes"- 如何优化解决方案?

r - 根据条件求和选择行 tidyverse

algorithm - 前馈 ANN : calculating delta node from previous layer delta

python - 如何在文本文件中找到最相关的字符串?