我正在解决这个名为Cut the Sticks的hackerrank挑战,但是当数组中仍有值时,我无法找到一种方法来执行此操作。
问题是,给定一个数组,找到最小元素,从数组中的所有元素中减去它,而它们与0不同,并打印所做的减法数。
然后使用新的数组进行减法,重复相同的步骤,找到最小数并减去它,直到你无法进行任何减法。
这是我的代码。我已经尝试了数组中所有元素的总和,然后在总和不为0的情况下进行后续步骤,但我无法使其工作。它无限地显示大量数字。
你能帮我解决这个简单的任务吗?
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt(); // Numero de sticks
int arr[] = new int[n]; // Arreglo Contenedor de longitud de sticks
for (int arr_i = 0; arr_i < n; arr_i++) {
arr[arr_i] = in.nextInt(); // Longitud de los sticks
}
int cut_counter = 0;
int min = arr[0];
for (int i = 0; i < n; i++) {
if (arr[i] < min) {
min = arr[i];
}
}
//System.out.println(min);
for (int j = 0; j < n; j++) {
if (arr[j] != 0) {
arr[j] = arr[j] - min;
cut_counter += 1;
}
}
System.out.println(cut_counter);
/*System.out.println(" ");
for (int i = 0; i < n; i++) {
System.out.print(arr[i]);
}*/
}
}
答案 0 :(得分:1)
您的代码可能需要进行一些小修改:
public static void main(String[] args) {
System.out.print("Enter number of numbers: ");
Scanner in = new Scanner(System.in);
int n = in.nextInt(); // Numero de sticks
int arr[] = new int[n]; // Arreglo Contenedor de longitud de sticks
System.out.println("Enter " + n + " numbers: ");
for (int arr_i = 0; arr_i < n; arr_i++) {
arr[arr_i] = in.nextInt(); // Longitud de los sticks
}
int cut_counter;
do {
cut_counter = 0;
boolean min_set = false;
int min=Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
if (arr[i]!=0) {
min=arr[i];
min_set=true;
}
}
if (!min_set)
break;
for (int i = 0; i < n; i++) {
if (arr[i] < min && arr[i] != 0) {
min = arr[i];
}
}
System.out.println("Min=" + min);
//System.out.println(min);
for (int j = 0; j < n; j++) {
if (arr[j] != 0 && min > 0 ) {
arr[j] = arr[j] - min;
cut_counter += 1;
}
}
System.out.println("cut_counter=" + cut_counter);
for (int i = 0; i < n; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
} while (cut_counter > 0);
}