社区
C#
帖子详情
求助 一個算法
swallow_x
2006-04-03 04:57:32
要從一組數據中找出任意一種組合(一個,兩個,或三個……)相加等於某個特定的數,並記錄是哪幾個數的組合。
例如:a[]={100,1,200,2,500,3} b=800
得到結果應該是a[0]+a[2]+a[4] = 800
請各位高手幫幫忙。謝謝
...全文
174
10
打赏
收藏
求助 一個算法
要從一組數據中找出任意一種組合(一個,兩個,或三個……)相加等於某個特定的數,並記錄是哪幾個數的組合。 例如:a[]={100,1,200,2,500,3} b=800 得到結果應該是a[0]+a[2]+a[4] = 800 請各位高手幫幫忙。謝謝
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sweig0721
2006-04-05
打赏
举报
回复
是的.學習!
-渔民-
2006-04-05
打赏
举报
回复
mark
stonepeter
2006-04-05
打赏
举报
回复
经典算法:组合问题。呵呵。
swallow_x
2006-04-05
打赏
举报
回复
謝謝 Knight94(愚翁) 但是我不知道怎麼給分 -_-||
止戈而立
2006-04-04
打赏
举报
回复
组合。。
lonelyair
2006-04-04
打赏
举报
回复
static void Main(string[] args)
{
int []a={100,1,200,2,500,3};
int b = 800;
int [] c=new int [6];
int IndexNum = 0;
if (FindArray(ref a, ref c, b, 0, 0, ref IndexNum))
{
Console.Write("a[{0}] + a[{1}] + a[{2}] = {3}", c[0], c[1], c[2],b);
Console.ReadLine();
}
}
public static bool FindArray(
ref int[] Values,
ref int[] Indexes,
int TotalValue,
int CurValue,
int StartIndex,
ref int IndexNum)
{
for (int i = StartIndex; i < Values.Length; i++)
if ((CurValue + Values[i]) <= TotalValue)
{
Indexes[IndexNum++] = i;
CurValue += Values[i];
if (CurValue == TotalValue) return true;
else if (FindArray(ref Values,
ref Indexes,
TotalValue,
CurValue,
i + 1,
ref IndexNum))
return true;
else
{
//Re-set value
CurValue -= Values[i];
//Indexes-- 改为:IndexNum--
Indexes[IndexNum--] = 0;
}
}
return false;
}
Knight94
2006-04-04
打赏
举报
回复
Sorry!
写错一个参数,即把“i”改成“i+1”即可,如
private bool FindArray(
ref int[] Values,
ref int[] Indexes,
int TotalValue,
int CurValue,
int StartIndex,
ref int IndexNum )
{
for ( int i = StartIndex; i < Values.Length; i++)
if ((CurValue + Values[i]) <= TotalValue)
{
Indexes[IndexNum++] = i;
CurValue += Values[i];
if (CurValue == TotalValue) return true;
else if (FindArray(ref Values,
ref Indexes,
TotalValue,
CurValue,
i + 1,
ref IndexNum))
return true;
else
{
//Re-set value
CurValue -= Values[i];
Indexes[Indexes--] = 0;
}
}
return false;
}
serversql
2006-04-03
打赏
举报
回复
这个算法应该比较复杂,你那一点分不够.至少要花2\3个小时
swallow_x
2006-04-03
打赏
举报
回复
好像是個死循環
Knight94
2006-04-03
打赏
举报
回复
private bool FindArray(
ref int[] Values,
ref int[] Indexes,
int TotalValue,
int CurValue,
int StartIndex,
ref int IndexNum )
{
for ( int i = StartIndex; i < Values.Length; i++)
if ((CurValue + Values[i]) <= TotalValue)
{
Indexes[IndexNum++] = i;
CurValue += Values[i];
if (CurValue == TotalValue) return true;
else if (FindArray(ref Values,
ref Indexes,
TotalValue,
CurValue,
i,
ref IndexNum))
return true;
else
{
//Re-set value
CurValue -= Values[i];
Indexes[Indexes--] = 0;
}
}
return false;
}
------Function Call-------
int[] Indexes = new int[yourValues.Length];
int IndexNum = 0;
bool blnRet = FindArray( ref yourValues,
ref Indexes,
yourTotalValue,
0,
0,
ref IndexNum );
if( blnRet )
{
for( int i = 0; i < IndexNum; i++ )
{
Console.WriteLine( string.Format("Index:{0} Value:{1}", Indexes[i], yourValues[Indexes[i]] ) );
}
}
算法
技术手册 - 中文版
· 快速找到与您所解决的问题相关的
算法
,并决定哪个
算法
才是最适合的那一个 · 探索使用C、C++、Java以及Ruby实现的
算法
解决方案以及开发小贴士 · 了解
算法
预期的性能,以及它达到最高性能时所需要的条件 ...
java
算法
大全
开发健壮的软件需要高效的
算法
,然而程序员们往往直至问题发生之时,才会去
求助
于
算法
。本书讲解了许多现有的
算法
,可用于解决各种问题。通过阅读它,你可以学会如何选择和实现正确的
算法
,来达成自己的目标。另外,...
算法
助手使用教程
算法
助手是我们开发的一款运行在Android平台上基于Xposed的安卓调试工具,配合Xposed(需要Root),通过一系列Hook,反射操作,进行应用的安全测试,调试分析,代码定位,是一款不错的调试工具。 基础使用教程 步骤
【JavaScript
算法
实践】最短路径
算法
目录前言一、Dijkstra
算法
算法
实现二、Floyd-Warshall
算法
算法
实现 前言 最短路问题是图问题中的经典问题,这类问题在生活中非常常见,我们(特别是生活在大城市的人)出门在外,无论是驾车还是乘坐公共交通工具,...
什么是
算法
,学习
算法
有什么用
任何一个问题的解决方案都并非是凭空出现的,解决一个问题都需要选择一个合适的方法,并在此方法的引导下完成一系列的解答步骤,最终将问题转换为结果状态,对于计算机来说,这样的方法就是
算法
。
算法
有很多种分类...
C#
111,092
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章