2016-11-09 64 views
0

我解決這個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

該問題的鏈接? –

+0

的問題發生在某一時刻,當陣列中的最小值爲0。該最小值然後從數組中的元素的其餘部分中減去,並在它們的值沒有變化(因爲任何數量減去0是相同數) 。但是,您仍在計算該減法,因此減法計數不會減少。也許你應該檢查你正在減去的值是否永遠不會小於1. –

回答

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

} 
相關問題