我是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我知道我可以在某个地方查找解决方案,但我想知道为什么我的代码无效)
答案 0 :(得分:0)
你遇到的问题是你的findMin
不排除零长度元素,所以一旦你有一个零将是min,因此while循环的迭代将是相同的作为前一次迭代,从A
的每个元素中减去0。