最近一个项目需要一个算法。请大家来帮忙。
--------------------编程问答-------------------- 有N个数,用户输入一个数。
有N个数,用户输入一个数。
比如有100个数,用户输入他要的数量Sum,系统将自动从100个数中调选一些数加起来=Sum的。(要求sum由100个数中最少个数组成的)例1:1,1,3,5,7,用户输入10. 系统选到3+7。例2: 1,1,3,5,7,2,8 用户输入10.3+7,2+8都要显视出来让用户选
如果不符合=sum的。返回
比如有100个数,用户输入他要的数量Sum,系统将自动从100个数中调选一些数加起来=Sum的。(要求sum由100个数中最少个数组成的)例1:1,1,3,5,7,用户输入10. 系统选到3+7。例2: 1,1,3,5,7,2,8 用户输入10.3+7,2+8都要显视出来让用户选
如果不符合=sum的。返回
--------------------编程问答-------------------- welcome!up! --------------------编程问答-------------------- 帮顶,算法费脑筋 --------------------编程问答-------------------- )例1:1,1,3,5,7,用户输入10. 系统选到3+7。例2: 1,1,3,5,7,2,8
这些1,3,5,7 怎么来的?用户自己输还是怎么的 --------------------编程问答-------------------- 有空的高手来试试啊。 --------------------编程问答--------------------
已经有的了。在数据库里面。 --------------------编程问答-------------------- 有点意思,留名。 --------------------编程问答-------------------- 这是组合问题,
1、将大于sum的元素全部排出掉,若有,
2、在赛选后的结果集中任取2个数组合,每组求和比较,若=sum则将组合数输出,反正继续求3的组合,求4的组合,若n-1个组合都无满足结果,则无满足的结果存在, --------------------编程问答-------------------- case up ------------------------- --------------------编程问答-------------------- 路过,学习了~ --------------------编程问答-------------------- !!!!!!!!!!!!!!!!!!!!! --------------------编程问答-------------------- 首先确定你那n个数的集合大小,如果只是100个数,那根本不用什么算法,只要循环就可以了,只要不在循环内连数据库读取数据,速度上根本不成问题。只有那个集合很大,循环判断sum会很慢时再考虑用算法来提高效率 --------------------编程问答-------------------- 以前我写过一个,下班回家把代码贴上,但是代码的效率我就没考虑了。 --------------------编程问答-------------------- 12楼正解 --------------------编程问答-------------------- 用循环就可以了
然后判断一下 --------------------编程问答-------------------- 是两个数还是n个数加起来等于输入的sum? --------------------编程问答-------------------- 顶下! --------------------编程问答-------------------- 背包算法...自己去查查吧... --------------------编程问答--------------------
同意 --------------------编程问答-------------------- 目前不考虑效率的话
1.用穷举,可得到所有的满足相当= sum的组合
2.从这些组合中, 筛选出无数最少的那一组, 如果最小元数的组合存在多个,则让用户自己选择. --------------------编程问答-------------------- 上面打错个字 相当== 相加, 我大概写了一段码(仅尝试两两相加),没有调试
--------------------编程问答-------------------- using DP --------------------编程问答-------------------- 如果两两相加没找到满足条件的组合 ,则查询三个数相加,依次类推, 很久没玩算法了, 应该还有更简单的方法 ,只是没想到. --------------------编程问答-------------------- 这个问题,我遇见了,没解决,陈老师帮我解决了,他技术很不错的,在IT人际网小有名气,我有问题就问他了,楼主还头疼吗?不妨去问问他吧 --------------------编程问答-------------------- private void button2_Click(object sender, EventArgs e)
int[] a = new {1,2,3,4,5,6,7,8,9};
int sum = 10;
string[] str = new string[9]; // 保存尝试结果
for(int i = 0; i < 9; i++)
{
str[i] = a[i].ToString() + "+";
for(int j = i + 1; j < 9; j++)
{
if(a[i] + a[j] == sum)
{
str += a[j].ToString();
Continue;
}
}
}
{
int count = 100;
int[] data = new int[count];
Random rd = new Random();
for (int i = 0; i < data.Length; i++)
{
data[i] = rd.Next(0, 100);
}
Array.Sort(data);
Sum(data, 100, 0, 0, "");
foreach (string str in list)
{
Console.Write(str);
}
}
List<string> list = new List<string>();
/// <summary>
/// 求和
/// </summary>
/// <param name="data">用于计算的int数据</param>
/// <param name="sum">需要求和的结果</param>
/// <param name="current">上一步求和结果</param>
/// <param name="index">当前要计算的数据下标</param>
/// <param name="l">保存临时计算出来的数据,用字符串保存</param>
private void Sum(int[] data, int sum, int current, int index, string l)
{
// 越界
if (index >= data.Length)
{
return;
}
// 求和结果相等,保存结果
if (current + data[index] == sum)
{
list.Add(l + "," + data[index].ToString());
return;
}
// 超过了,返回
else if (current + data[index] > sum)
{
return;
}
// 求和当前值,计算下一个值
else
{
Sum(data, sum, current + data[index], index + 1, l + "," + data[index].ToString());
}
// 不计算当前值,计算下一个值
Sum(data, sum, current, index + 1, l);
--------------------编程问答-------------------- 楼上算法是有问题的,有重复,而且比较慢。
我记得我以前好像写过,等哈整理一下发给你。
补充:.NET技术 , C#