求给定数等于最少的几个完全平方数之和
2016-08-28 13:44
190 查看
1.数据数量少,单个数据大小不限
先计算其中最大的一个平方数,如果等于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;
}
方法是一样的,只不过拿了个数组记了一下。。。
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;
}
方法是一样的,只不过拿了个数组记了一下。。。
相关文章推荐
- 求给定数等于最少的几个完全平方数之和
- 给一个正整数 n, 找到若干个完全平方数(比如1, 4, 9, ... )使得他们的和等于 n。你需要让平方数的个数最少。
- 给一个正整数 n, 找到若干个完全平方数(比如1, 4, 9, ... )使得他们的和等于 n。你需要让平方数的个数最少。
- 算法:php求几个数字之和刚好大于或等于某一个给定的值
- 输入两个整数n和m,从数列1,2,3,...,n中随意取几个数,使其和等于m,将其所有可能的组合列出来。 递归求解
- 给定整数区间[A,B]问其中有多少个完全平方数
- 陈利人 面试题 给定两个字符串s和t(len(s)>len(t)),t可能是s的一个子序列。求所有s的子序列集合中,有多少个子序列等于t。
- poj 1236 Network of Schools 【SCC + 缩点】【最少连接几个点可以直接或间接连接所有点 + 增加最少的边使图强连通】
- 从数列1, 2, 3, ... , n 中 随意取几个数,使其和等于sum.
- 一个中兴的面试题,输入两个数n和m,从数列1,2,3……n中随意取几个数,使其和等于m,要求将其中所有组合列出来编程求解(c语言递归函数分解法)
- 微软,Google面试题 (10) —— 在排序数组中寻找两个数的和等于给定数
- 程序员面试金典: 9.4树与图 4.9在二叉树中,打印结点数值总和等于给定值的所有路径
- 快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值
- 给定两个站点,如果没有直达的路线,如何找到换乘次数最少的路线?
- 输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数, 使其和等于 m
- 【41】递增数组判断是否存在两个树等于给定值
- 中兴面试题 : 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m. --java算法解决方法。
- 描述一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数 X 时,判断出S中是否存在有两个其和刚好等于 X 的元素。
- Path Sum 一个树里边,看看有没有一条路径上边的和等于给定的数
- 在一组序列中查找两个元素的和等于给定的值(快排+两端扫描实现)