假设您不应该使用复杂的算法,我建议您循环遍历所有选项,并检查平方和是否达到您需要的数字。在计算时,您可能还希望将数字保存在全局数组中,以简化getsquare
编辑:因为这是一个好问题,所以我写了一些代码。(警告:我没有检查)
int root[4];
int isqrt(int i) {return (int)floor(sqrt((double)i));}
// check if n is sum of s squares. assume s<=4
int canbesum(int s,int n) {
if (s==0) return n==0;
int i;
for (i=isqrt(n);i;i--)
if (canbesum(s-1,n-i*i)) {
root[s-1]=i;
return 1;
}
return 0;
}
int sumofsquares (int x) {
int i;
for (i=0;i<=4;i++) if (canbesum(i,x)) return i;
}
Run Code Online (Sandbox Code Playgroud)