2017-06-06 4 views
0

Hier ist die Frage: Eine ganze Zahl ist definiert als eine gerade Untermenge einer anderen ganzen Zahl n, wenn jeder gerade Faktor von m auch ein Faktor von n ist. Zum Beispiel 18 eine gerade Teilmenge von 12, weil die auch Faktoren von 18 2 und 6, und diese sind beide Faktoren von 12. Aber 18 ist nicht eine gerade Teilmenge von 32, da 6 nicht ein Faktor von 32.isEvenSubset kam nicht zurück 1

Dies ist eine Beispielfrage einer Universität. Die Frage lautet explizit: Keine zusätzlichen Datenstrukturen einschließlich Arrays zulässig - bitte beachten Sie dies auch bei der Antwort. Vielen Dank.

Hier ist meine Antwort Code:

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

Dieser Code nicht wie gewünscht funktionieren. Bitte helfen Sie mir herauszufinden, wo ich falsch gemacht habe?

+0

Warum gibt es ein 'int' zurück? Sollte es nicht ein 'boolean' sein? m ist oder ist keine gerade Teilmenge von n. – Sweeper

+0

@Sweeper Wahrscheinlich weil die Frage zuerst in einem C-Kurs verwendet wurde, dann minimal an Java angepasst. –

Antwort

2

Sie überprüfen, ob m und n gerade sind, anstatt ob ihre Faktoren gerade sind. Außerdem wird die innere Schleife nicht benötigt, suchen Sie einfach alle geraden Faktoren der ersten Zahl und prüfen Sie, ob alle von ihnen auch Faktoren der zweiten Zahl sind.

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) kehrt true und isEvenSubset(18,32) kehrt false.

+0

Wow. Elegante Lösung! Das hat wie eine Magie funktioniert. :) –