日期:2014-05-20 浏览次数:20923 次
import java.util.*;
public class Test
{
public static boolean groupNoAdj(int start, int[] nums, int target)
{
if (start >= nums.length) //当起始位置超过数组个数时,停止递归
{
return false;
}
if (groupNoAdj(start + 1, nums, target)) //递归调用
{
return true;
}
for (int i = start + 2; i < nums.length; i++) //因为不能取当前数的下一个数,所以要加2
{
if (nums[start] + nums[i] == target) //只要有一组满足条件就返回true
{
return true;
}
}
return false; //否则返回false
}
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
System.out.print("Enter the target: ");
int target = scanner.nextInt();
System.out.print("Enter the num of elements in the array: ");
int[] nums = new int[scanner.nextInt()];
System.out.println("Enter the elements: ");
for (int i = 0; i < nums.length; i++)
{
nums[i] = scanner.nextInt();
}
if (groupNoAdj(0, nums, target))
{
System.out.println("We can make a group that sums to: " + target);
}
else
{
System.out.println("We can not make a group that sums to: " + target);
}
}
}
------解决方案--------------------
刚才忽视了一个数字不能够连续的条件。
贴上更新的代码。
public boolean groupNoAdj(int start, int[] nums, int target) {
if(start >= nums.length)
return false;
if(nums[start] == target){
return true;
}
else if (nums[start] < target) {
if(groupNoAdj(start + 2,nums,target-nums[start])) //start的数字小于需要的,尝试将这个数字添加进,故要跳2位
return true;
else
return groupNoAdj(start + 1,nums,target); //start的数字小于需要的,由于添加后,无法获得正确的序列,故不添加这个数字,则后一个数字可用
}else{
return groupNoAdj(start + 1,nums,target);
}
}