2017-05-29 68 views
0

我試圖獲取數字的因子並找到該數字的因子之間的最小距離。我試圖通過2個步驟完成這個過程,首先找到這些因素,然後把這些數字找出它們之間的最小距離。 我用這個來找到一些如何獲得陣列中的輸出值以進一步處理輸出

Scanner input = new Scanner(System.in); 
    int n; 
    System.out.println("Enter a number"); 
    n = input.nextInt(); 
    if(n <= 0){ 
     System.out.println("cant input a number less than or equal to zero"); 
     input.close(); 
     return; 
    } 
    System.out.println("factors of " + "" + n+ "" + " are"); 
    for(int i = 1; i <= n; i++){ 
     if(n % i == 0){ 
      System.out.println(i); 

     } 
    } 

我怎麼能再次得到這些輸出,發現它們 之間的最小距離,我想這個邏輯

int[] a = new int[] {i}; 
    Arrays.sort(a); 
    int minDiff = a[1]-a[0]; 
    for (int i = 2 ; i != a.length ; i++) { 
     minDiff = Math.min(minDiff, a[i]-a[i-1]); 
    } 
    System.out.println(minDiff); 

我的問題是的階乘,我不不知道如何將這些輸出存儲在數組中以供進一步計算。

+0

你說「*我試圖得到一個數的階乘*」,你的意思是因素,不是嗎? –

+0

@Chandler Bing yea對於混淆抱歉。我會糾正我的問題。 –

回答

1

您應該創建一個List(可調整大小的數組)並向其添加因子。然後你可以在列表中應用你的邏輯。

獲取一看:

List<Integer> factors = new ArrayList<>(); // create an empty ArrayList 
    for(int i = 1; i <= n; i++){ 
     if(n % i == 0){ 
      System.out.println(i); 
      factors.add(i);     // add i to it. 
     } 
    } 
    // we can hopefully assume that n have at least two factors (if n > 1, that is) 
    // no need to sort, insertion order is kept 
    int minDiff = factors.get(1) - factors.get(0); 
    for (int i = 2 ; i < factors.size() ; i++) {  
     minDiff = Math.min(minDiff, factors.get(i)-factors.get(i-1)); 
    } 
    System.out.println(minDiff); 
1

首先,你需要一個ArrayList存儲的n的因素。你可以做的

List<Integer> factors = new ArrayList<>(); 
for(int i = 1; i <= n; i++){ 
    if(n % i == 0){ 
     factors.add(i); 
    } 
} 

線的東西現在,尋找最小的區別,你可以遍歷所有的ArrayList,像

int minDiff = factors.get(1)-factors.get(0); 
for (int i = 2 ; i < factors.size(); i++) { 
    minDiff = Math.min(minDiff,factors.get(i)-factors.get(i-1)); 
} 

而且,沒有必要排序的陣列,因爲這些因素已經被排序。

+0

這工作就像一個魅力:) –

+0

如何獲得此函數簽名int minDistance(int n)? –

+0

@SusHill是否會返回一些東西?如果是的話,那麼把所有的代碼放在裏面,最後做一個'return minDiff'。 –