从数组内选数,得到指定的和(C++ Java C# VB Pascal PHP Python .net 不限语言) 15
inta[]={460,588,720,1250,1800,2200,3080,4100,4375,5184,6510,6900,9000};对于上面的数组,取出几个数相...
int a[] = { 460, 588, 720, 1250, 1800, 2200, 3080, 4100, 4375, 5184, 6510, 6900, 9000 };
对于上面的数组,取出几个数相加,得到结果为:13750
注:每个数只能用一次。求哪几个数相加等于13750;
求最优算法、伪代码、代码、语言不限
算法效率最优者得分,加分! 展开
对于上面的数组,取出几个数相加,得到结果为:13750
注:每个数只能用一次。求哪几个数相加等于13750;
求最优算法、伪代码、代码、语言不限
算法效率最优者得分,加分! 展开
4个回答
展开全部
貌似只有一解 [1800, 1250, 6900, 720, 3080]
随机算法,一般500次计算就出结果了(看运气,最好11次出),速度快。
def sum2():
lt = [460, 588, 720, 1250, 1800, 2200, 3080, 4100, 4375, 5184, 6510, 6900, 9000]
n = random.randint(2,13)
ltResult = []
total = 0
for i in range(0,n):
m = random.randint(0,len(lt)-1)
ltResult.append(lt[m])
total += lt[m]
lt.remove(lt[m])
if(total>=13750):
break
if(total==13750):
return ltResult
else:
return []
for i in range(0,10000):
re = sum2()
if(len(re)>0):
print re
break
else:
print '%s# failed' % i
还有一种就是死算,2的13次求和,13个循环,有点恐怖。
随机算法,一般500次计算就出结果了(看运气,最好11次出),速度快。
def sum2():
lt = [460, 588, 720, 1250, 1800, 2200, 3080, 4100, 4375, 5184, 6510, 6900, 9000]
n = random.randint(2,13)
ltResult = []
total = 0
for i in range(0,n):
m = random.randint(0,len(lt)-1)
ltResult.append(lt[m])
total += lt[m]
lt.remove(lt[m])
if(total>=13750):
break
if(total==13750):
return ltResult
else:
return []
for i in range(0,10000):
re = sum2()
if(len(re)>0):
print re
break
else:
print '%s# failed' % i
还有一种就是死算,2的13次求和,13个循环,有点恐怖。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
每个数只能用一次,你这个问题估计Bill Joy也解决不了。更别说我们了。
解决思路:
1:求出数组长度len
2:int n=1时,判断是否有值等于13750的,
2: n=2时,判断是否有两个数相加的值等于13750的。
3: n=3.....
4:当n=len时,就是所有数相加是否等于13750,这是本人思路,供参考
解决思路:
1:求出数组长度len
2:int n=1时,判断是否有值等于13750的,
2: n=2时,判断是否有两个数相加的值等于13750的。
3: n=3.....
4:当n=len时,就是所有数相加是否等于13750,这是本人思路,供参考
追问
最少要伪代码吧,才有判断效率的依据。。。
就是从几个数中选出几个,等于13750.
关键是怎么快速找。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
类似冒泡法,嘿嘿
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主是在知道数组里面是这些数的情况下吗?
追问
对。从上面的已知数,选出来。和等于13750
追答
楼主有邮箱没?发给你,用了2个嵌套了2个FOR的循环!
一个通用的算法,你可以随便改变数组里的数字和数组的大小,和要求的和
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询