2017-05-29 58 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'。 –