您的位置:首页 > 编程语言 > C语言/C++

求给定数等于最少的几个完全平方数之和

2016-08-28 13:44 190 查看
1.数据数量少,单个数据大小不限

int MixFuntion(int n)
{
int i = sqrt(n);
if (i*i == n)
return 1;
int minLen = INT_MAX;
for(;i*i >= n/2;i--)
{
int len = 1 + MinExpressionInteger(n - i*i);
if (minLen > len)
minLen = len;
}
return minLen;
}


先计算其中最大的一个平方数,如果等于i就返回1。

之后用递归的方式算出最大平方数为k*k时的len,在与最大平方数为其他值的情况进行比较,得出minlen

i

┌───┬──────┬───────────────┐

│          │                  │                   k*k                     │

└───┴──────┴───────────────┘

2数据数量大,单个数据小


const int MAX = 100000;
int MinNum[MAX+1] = {0};

int MixFuntion(int n ,int &mixLen)
{
if(n > MAX)
return 0;

int i = sqrt(n);
if(i*i == n)
{
MinNum
= 1;
return 1;
}
int flag = 0;
for(;i*i >= n/2;i--)
{
int num = n-i*i;
if(!MinNum[num])
MixFuntion(num);
if(!MinNum[flag] || MinNum[flag]>MinNum[num])
flag = num;
}
MinNum
= MinNum[flag] + 1;
mixLen = MinNum
;

return 1;
}

方法是一样的,只不过拿了个数组记了一下。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++
相关文章推荐