给定n个正整数(1<=n<=100),把这n个数用+或-连起来求出结果,设计一算法使结果接近0

这n个数在0到100之间(含0或100)... 这n个数在0到100之间(含0或100) 展开
zzk32
2011-06-06
知道答主
回答量:18
采纳率:0%
帮助的人:0
展开全部
如果有四个数 n-3、n-2、 n-1、 n那么只要(n、n-3)为正 (n-2、n-1)为负相加结果就为0
if(n % 4 == 0)n%4 =1 和 n%4 = 0之前用+号 其余用-号 结果是0 (*)
if(n % 4 == 1)由于n*(n+1)/2 是奇数,所以结果只能是1或者-1,把1取出来,剩n-1个数同(*) 操作,再在1前面加+或者-
if(n % 4 == 2)由于n*(n+1)/2 是奇数,所以结果只能是1或者-1,把1和2取出来,剩下的数同(*)操作,再在1和2前面加不同的号(如1前面-号,2前面+号)
if(n % 4 == 3)把1、2、3取出来,剩下的数同(*)操作,再在1和2前面加+号,三前面加-号,结果为0
纷舞妖
2011-06-06 · TA获得超过159个赞
知道答主
回答量:75
采纳率:0%
帮助的人:73.3万
展开全部
比如 是这几个数(由小到大排列),1.首尾两数相加,2.然后 减去相邻的首尾两数之和,可以得到几组差值,3.最后将差值加起来

例如 a b c d e f g h (由小到大排列)

计算方法:(a+h)-(b+g) + (c+f)-(d+e)

其余的以此类推~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xzwxkj
2011-06-07 · TA获得超过574个赞
知道答主
回答量:54
采纳率:0%
帮助的人:39.5万
展开全部
算法思路:
1、排序,求和SUM;计算和的一半SUM/2;
2、找到最后x个大数,使得其和SumX不超过SUM/2;计算差值d:d=SUM/2-SumX
3、试找最接近于d的数,(接近程度可设置);
4、若找到,令次数和(2)中最后x个大数均正号,余下负号,得解;
5、若未找到,从最小的y个数中应能凑出累加和最接近d,这些数和(2)中最后x个大数均赐正号,余下赐负号,得解。
这是方法之一,试试看吧。
追问
x,y是怎么找的,不太理解 能举例说一下吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式