C语言,算法问题 输入N个整数(包括零和负数),随机取出其中的n个数,求n个数的最小积。(n<=N
C语言,算法问题输入N个整数(包括零和负数),随机取出其中的n个数,求n个数的最小积。(n<=N<=256)比如输入6-31-5-6372输出-126实现这一个函数,应该...
C语言,算法问题
输入N个整数(包括零和负数),随机取出其中的n个数,求n个数的最小积。(n<=N<=256)
比如输入
6 - 3
1 -5 -6 3 7 2
输出
-126
实现这一个函数,应该用一个怎么样的算法或者怎样的思路来写这个?要求是代码不能超过100行。 展开
输入N个整数(包括零和负数),随机取出其中的n个数,求n个数的最小积。(n<=N<=256)
比如输入
6 - 3
1 -5 -6 3 7 2
输出
-126
实现这一个函数,应该用一个怎么样的算法或者怎样的思路来写这个?要求是代码不能超过100行。 展开
1个回答
展开全部
1 应该按照绝对值排序。得到从大到小的a[N]
2 检查a[n-1]是否为0,如果是,那么代表0的个数超过N-n个,最小积必然为0.否则执行3
3 统计排序后,前n个数中负数的个数
1) 负数个数为0,那么看剩余部分是否有负数
如有,选取最大负数替换最小正数,即a[n-1]; 这时前n项乘积为最小。
如果没有,看剩余部分是否有0值,如果有,则最小积为0,
如果剩余部分0和负数都没有,代表整个序列都是正值,那么最小积为最后n项。
2 )负数个数为奇数,那么最小积为前n项乘积。
3) 负数个数为非0偶数,那么看剩余部分是否有正数
这部分还没想清楚,貌似比较麻烦。
2 检查a[n-1]是否为0,如果是,那么代表0的个数超过N-n个,最小积必然为0.否则执行3
3 统计排序后,前n个数中负数的个数
1) 负数个数为0,那么看剩余部分是否有负数
如有,选取最大负数替换最小正数,即a[n-1]; 这时前n项乘积为最小。
如果没有,看剩余部分是否有0值,如果有,则最小积为0,
如果剩余部分0和负数都没有,代表整个序列都是正值,那么最小积为最后n项。
2 )负数个数为奇数,那么最小积为前n项乘积。
3) 负数个数为非0偶数,那么看剩余部分是否有正数
这部分还没想清楚,貌似比较麻烦。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询