【发布时间】:2020-09-07 21:04:05
【问题描述】:
如何在数组中找到对给定数字求和的最小整数。程序应要求用户输入整数数组(“Input Array”)和所需的总和(“Required Sum”)。输出(“Output”)应列出输入数组中对“Required Sum”求和的最小整数。
在这里我创建 函数 sum() 并在从用户 45 读取总和时声明包含一些元素的数组,它给了我输出 25,25 但是当我输入 59 和 60 时,输出没有任何显示
public static void sum()
{
int arr[]={10,0,-1,20,25,30};
Scanner in=new Scanner(System.in);
int sum=in.nextInt();
int[] sub = new int[arr.length];
int temp = 0;
for (int i = 0; i < arr.length; i++)
{
for (int j = i, col = 0; j < arr.length; j++, col++)
{
//add the value of input array one by one
temp += arr[j];
sub[col] = arr[j];
//if addition is equal to sum then print it
if (temp == sum)
{
int total = 0;
for (int k = 0; k < sub.length; k++)
{
total += sub[k];
System.out.println(sub[k]);
//if total and sum are equal then leave the print
if (total == sum)
{
System.out.println();
break;
}
}
}
//if temp is greater than sum are equal then clear the sub array, set temp value and leave the loop for next
if (temp > sum)
{
temp = 0;
break;
}
}
}
}
输出示例:
输入数组: [10, 0, -1, 20, 25, 30]
所需总和: 45
输出: [20, 25]
所需总和: 59
输出: [10, -1, 20, 30]
所需总和: 60
输出: [10, 20, 30]
【问题讨论】:
-
方法从根本上是不正确的,因为您正在将数字添加到 temp,但是会有两条路径,其中一条您将选择当前数字,而另一条则不会。寻找子集子问题,这是与此相关的一个链接。 algorithms.tutorialhorizon.com/…
标签: java