【发布时间】:2011-12-09 18:20:17
【问题描述】:
给定一个大小为 N 的数组,我需要找到在最小和最大范围内求和的最小值数。
例如:考虑一个数组[1,2,3,4,5]。我需要从该数组中找到总和大于 5 且小于 8 的最小值。 Ans:因为 1+5 大于 5 且小于 8,所以值的最小数量是 2 因此答案。
下面是我实现逻辑的函数。
int void CheckValue()
{
for (i = 0; i <5; i++)
if (a[i] > min && a[i] < max)
return 1;
for (i = 0; i< 4; i++)
for (j = i + 1; j < 5; j++)
if (a[i] + a[j] > min && a[i] + a[j] < max)
return 2;
for (i = 0; i < 3; i++)
for (j = i + 1; j < 4; j++)
for (k = j+1; k < 5; k++)
if (a[i] + a[j] + a[k] > min && a[i] + a[j] + a[k] < max)
return 3;
for (i = 0; i < 2; i++)
for (j = i + 1; j< 3; j++)
for (k = j + 1; k< 4; k++)
for (l = k + 1; l < 5; l++)
if (a[i] + a[j] + a[k] + a[l] > min && a[i] + a[j] + a[k] + a[l] < max)
return 4;
if(a[0]+a[1]+a[2]+a[3]+a[4]>min && a[0]+a[1]+a[2]+a[3]+a[4]<max)
return 5;
return 0;
}
它工作正常,但问题在于它的复杂性。任何人都可以提供任何建议以进一步优化此代码或提供更好的逻辑来实现它。
【问题讨论】:
-
数组是否允许包含负数?
-
如果我在数组中添加第六个元素会怎样?
-
没有负数只有正数..
-
@blender 这只是一个展示我如何解决这个问题的例子。数组可以有任意数量的元素,代码会相应地改变......
-
数组总是像上面的例子那样排序吗?
标签: c algorithm optimization combinations