Foo Bar挑战测试案例失败

时间:2017-03-11 18:47:34

标签: java arrays subset

现在正在进行Foo Bar挑战赛,我接近达到3级。唯一阻止我的是单一案例失败,我无法确定。有人能看出为什么这段代码会失败吗?

期望的结果:如果我有一个数组说int [] x = {1,4,1};该程序应该获取该数组的子集,并找到其和为3的最大倍数的子集,并返回最大整数组合的子集。

发生了什么?:Google Foo.Bar正在给我

  

测试1通过了!   测试2通过了!   测试3通过了!   测试4通过了!   测试5失败。

我想知道导致此代码失败的原因。

下面'目的:

  

你有L,一个包含一些数字(0到9)的列表。写一个函数答案(L),它找到可以从这些数字中的一些或全部产生的最大数字,并且可以被3整除。如果不能产生这样的数字,则返回0作为答案。 L将包含1到9位数字。相同的数字可能会在列表中出现多次,但列表中的每个元素只能使用一次。

这里的代码可能很冗长,可以用更简单的方式完成:

public class Answer {   

public static int answer(int[] l) { 
    int n = l.length;
    int sum = 0;
    int max =0;
    int fragment = 0;

    // Run a loop to get all subsets of an Array
    for (int i = (1<<n)-1; i > 0; i--)
    {

        // Current subset
        for (int j = 0; j < n; j++)

            // (1<<j) is a number with jth bit 1
            // so when we 'and' them with the
            // subset number we get which numbers
            // are present in the subset and which
            // are not

            if ((i & (1 << j)) > 0) {
                sum+=l[j]; //Add the numbers of the subset together

                fragment = 10*fragment + l[j]; //Get the numbers used to get the sum
            }

        //Taking Advantage of the divisible rules of 3, if the sum of a subset is a multiple of 3 
        if(sum%3 == 0) {
            //Update the max multiple
            if (max<fragment) {
                max = fragment;
            }
        }

        sum=0;
        fragment = 0;

    }
    //Rearrange the max number order.
    return getLargestNumber(max);
}

//Function to reaarange an integer to it's greatest combination
private static int getLargestNumber(int input) {
    int[] numbers = new int[10];
    for(int i = input; i != 0; i /= 10) {
        numbers[i % 10]++;
    }
    int counter = 0;
    long result = 0;
    for (int i = 0; i < 10; counter += numbers[i++]) {
        result += (int)((Math.pow(10, numbers[i]) * i - 1) / 9)
                    * Math.pow(10, counter);
    }
    return (int)result;
}

}

编辑:当我使用Arrays.sort对数组进行排序时,我通过了测试5,但现在测试3失败了。也许测试与数组的排列有关?

0 个答案:

没有答案