编写一个函数,如果可以将数组划分为一个元素和其余元素,则 returns 为真,这样该元素等于乘积

Write a function that returns true if you can partition an array into one element and the rest, such that this element is equal to the product

package ArrayPractice;

import java.util.Arrays;
import java.util.Scanner;

public class Question7 {

    public boolean canPartition(int[] data) {
        Arrays.sort(data);
        int i = data[data.length - 1];
        System.out.println(i);
        int x = 1;
        int v = 1;
        for (int y = 0; y <= data.length - 2; y++) {
            x = data[y];
            v *= x;
        }
        if (v == i) {
            return true;
        }
        return false;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the array range: ");
        int x = sc.nextInt();
        int[] testing = new int[x];
        for (int y = 0; y < testing.length; y++) {
            System.out.println("Enter the Array number: " + y);
            testing[y] = sc.nextInt();
        }
        Question7 question7 = new Question7();
        System.out.println(question7.canPartition(testing));
    }
}

编写一个函数,如果您可以将数组划分为一个元素和其余元素,则 returns 为真, 使得该元素等于除自身以外的所有其他元素的乘积。

canPartition([2, 8, 4, 1]) ➞ true
8 = 2 x 4 x 1

canPartition([-1, -10, 1, -2, 20]) ➞ false

canPartition([-1, -20, 5, -1, -2, 2]) ➞ true

我的程序对正值有效,但对负值失败。

至少你可以用两个嵌套循环来做到这一点,并将每个项目与其余项目的产品进行比较:

private static boolean canPartition(int[] data) {
    for(int i = 0; i < data.length; i++) {
        int prd = 1;
        for(int j = 0; j < data.length; j++) {
            if (j == i) continue;              
            prd *= data[j];
        }
        if (prd == data[i]) return true;
    }
    return false;
}