如果数组中仍有值,如何执行操作?

时间:2016-11-09 16:38:39

标签: java arrays loops

我正在解决这个名为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]);
    }*/

 }
}

1 个答案:

答案 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);

}