Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 写一个程序,测试给定的数字是否是方案中不同平方的和_Algorithm_Sum_Scheme_Racket - Fatal编程技术网

Algorithm 写一个程序,测试给定的数字是否是方案中不同平方的和

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

在上一次考试中,我们必须编写一个程序,找出给定的数字是否可以写成非等数的平方和。 最小的正方形必须是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:更新-工作正常

(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