Algorithm 写一个程序,测试给定的数字是否是方案中不同平方的和
在上一次考试中,我们必须编写一个程序,找出给定的数字是否可以写成非等数的平方和。 最小的正方形必须是2^2,而不是1^2 e、 g.-给定的数字是13->true,因为13可以重写为2^2+3^2 如果给定的数字是8->false,因为8是2^2+2^2,这是相等的平方和 我在寻找正确的算法方面遇到了困难。例如,我将得到65号。我有一个想法,写一个帮助程序“squares”,它总能找到给定数字(从2^2开始)到给定数字或大于65的一个的sqr。例如,它会找到2^2 3^2 4^2 5^2 6^2 7^2 8^2,现在我不知道如何测试所有平方组合的总和,如果它们会给出答案65。答案应该是#正确的,因为4^2和7^2将给出结果65 编辑1: 我已经写了这段代码。它没有给出正确的结果 (总和sq 17)->正确 编辑2:更新-工作正常Algorithm 写一个程序,测试给定的数字是否是方案中不同平方的和,algorithm,sum,scheme,racket,Algorithm,Sum,Scheme,Racket,在上一次考试中,我们必须编写一个程序,找出给定的数字是否可以写成非等数的平方和。 最小的正方形必须是2^2,而不是1^2 e、 g.-给定的数字是13->true,因为13可以重写为2^2+3^2 如果给定的数字是8->false,因为8是2^2+2^2,这是相等的平方和 我在寻找正确的算法方面遇到了困难。例如,我将得到65号。我有一个想法,写一个帮助程序“squares”,它总能找到给定数字(从2^2开始)到给定数字或大于65的一个的sqr。例如,它会找到2^2 3^2 4^2 5^2 6^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)))))
(定义(平方和n)
(sum-sq-help-2 n 2))
(定义(sum-sq-help-2 n i)
(cond(=(sqr i)(/n2))#f)
(
输入:n
输出:n是平方和吗?
算法:
1.xs:={i^2 | 1从数字中提取连续的平方,然后检查这是否是一个不同的完美平方。因此,当你减去65-4^2,得到49,即7^2。继续尝试不同的n,直到n^2是给定数字的一半。@Barmar我用一个例子编辑了描述。-当我调用(sum-of.square-numbers 8)它将在无限递归中运行:/
(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