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

来源:互联网 发布:外国人 中国微信 淘宝 编辑:程序博客网 时间:2024/05/01 23:21

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[n] = 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[n] = MinNum[flag] + 1;    mixLen = MinNum[n];    return 1;}

方法是一样的,只不过拿了个数组记了一下。。。

















0 0