Java削减了棍棒

时间:2016-07-30 07:47:20

标签: java

我是Java的新手,我试图在Hackerrank上解决这个问题: 这是任务: https://www.hackerrank.com/challenges/cut-the-sticks

  

你被给予N支,每根棍的长度为正   整数。在棒上进行切割操作,使得全部   它们减少了最小的棍子的长度。

     

假设我们有六支以下长度:

     

5 4 4 2 2 8

     

然后,在一次切割操作中,我们从六个中的每一个切割长度为2   棒。对于下一次切割操作,留下四根棒(非零长度),>其长度如下:

     

3 2 2 6

     

重复上述步骤直到没有留下棍棒。

     

考虑到N支的长度,打印之前留下的棒数>每次后续裁员。

     

注意:对于每个剪切操作,您必须重新计算最小的长度   棍棒(不包括零长度棍棒)。

这是我的尝试,但它似乎没有起作用。输出卡在while循环中(4无限打印出来)

import java.io.*;
import java.util.*;

public class Solution {
    private static int findMin (int[] A)
    {
        int min = A[0];
        for (int i =0; i<A.length; i++)
        {
            if (A[i] < min)
            {
                min = A[i];
            }
        }
        return min;
    }
    private static int countNonZeros (int[] A)
    {
        int zeros = 0;
        for (int i =0; i<A.length; i++)
        {
            if (A[i] == 0)
            {
                zeros++;
            }
        }
        int nonZeros = A.length - zeros;
        return nonZeros;
    }    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] A = new int[n];
        for (int i=0; i<n; i++)
        {
            A[i] = scanner.nextInt();
        }             
        int nums = countNonZeros(A);
        while (nums > 0)
        {
            int mins = findMin(A);
            for (int j = 0; j<A.length; j++)
            {
                A[j]=A[j]-mins;
            }
            nums = countNonZeros(A);
            System.out.println(nums);
        }
    }
}

感谢任何帮助 (PS我知道我可以在某个地方查找解决方案,但我想知道为什么我的代码无效)

1 个答案:

答案 0 :(得分:0)

你遇到的问题是你的findMin不排除零长度元素,所以一旦你有一个零将是min,因此while循环的迭代将是相同的作为前一次迭代,从A的每个元素中减去0。