2017-06-06 30 views
0

這裏是問題:如果每個偶數因子m也是n的一個因子,則整數定義爲另一個整數n的偶數子集。例如,18是偶數子集12,因爲18的偶數因子是2和6,這兩個因子都是12。但是18不是32的偶數子集,因爲6不是32的因子。isEvenSubset沒有返回1

這是一個大學的樣本問題;該問題明確指出:沒有其他數據結構,包括數組允許 - 因此,請在提供答案的同時考慮這一點。謝謝。

這裏是我的答案代碼:

public class IsEvenSubset { 
    public static void main(String[] args) { 
     System.out.println(isEvenSubset(18,12)); 
    } 
    private static int isEvenSubset(int m, int n){ 
     for(int i=2;i<=m;i++){ 
      int count=0;//reset count in each round 
      if(m%2==0 && m%i==0){ 
       for(int j=2;j<=n;j++){ 
        if(n%2==0 && n%j==0){ 
         if(i==j)count++; 
        } 
       } 
       if(count==0)return 0; 
      } 
     } 
     return 1; 
    } 
} 

根據需要此代碼沒有工作。請幫我弄清楚我在哪裏做錯了?

+0

它爲什麼會返回一個'int'?它不應該是一個'boolean'嗎? m是或者不是n的偶數子集。 – Sweeper

+0

@Sweeper可能是因爲這個問題最初是在C課程中使用的,然後最低限度地適應了Java。 –

回答

2

您正在檢查mn是否是偶數,而不是它們的因子是否均勻。此外,不需要內部循環,只需找出第一個數字的所有偶數因素,並檢查它們是否都是第二個數字的因素。

private static boolean isEvenSubset (int m, int n) 
{ 
    for(int i = 2; i < m; i++){ // note that I don't consider m itself to be a factor of m 
     if (i % 2 == 0 && m % i == 0 && n %i != 0){ // i is an even factor of m but 
                // not a factor of n, so return false 
      return false; 
     } 
    } 
    return true; // all the even factors of m were also factors of n 
} 

isEvenSubset(18,12)回報trueisEvenSubset(18,32)回報false

+0

哇。高雅的解決方這就像一個魔術。 :) –