2012-11-26 10 views
15

Ho il codice corrente che era un goto ma mi è stato detto di non usare più goto perché è disapprovato. Sto avendo problemi a cambiarlo in un ciclo per dire un po '. Sono abbastanza nuovo per C# e programmazione in generale, quindi alcune di queste cose sono completamente nuove per me. Qualsiasi aiuto sarebbe apprezzato. La domanda effettiva è costituita da due numeri e trova il multiplo comune più basso.Minimo multiplo comune

Ecco l'originale con goto:

BOB: 
    if (b < d) 
    {     
     a++; 
     myInt = myInt * a; 
     b = myInt; 
     myInt = myInt/a; 

     if (b % myInt2 == 0) 
     { 
      Console.Write("{0} ", h); 
      Console.ReadLine(); 
     } 

    } 
    if (d < b) 
    { 
     c++; 
     myInt2 = myInt2 * c; 
     d = myInt2; 
     myInt2 = myInt2/c; 

     if (d % myInt == 0) 
     { 
      Console.Write("{0} ", t); 
      Console.ReadLine(); 
     } 
     else 
     { 
      goto BOB; 
     } 

    } 
    else 
    { 
     goto BOB; 
    } 

    } 
+2

Cosa succede se 'd' ==' b'? Inoltre sarebbe molto più semplice se ci mostrassi il codice originale che include 'goto'. Altrimenti, un rapido google per "C# minimo comune multiplo" potrebbe mostrare alcuni risultati utili ... –

+0

Ancora più importante ... qual è la domanda? – musefan

+0

Se questo è compito, potresti voler parlare con il tuo TA. – plinth

risposta

11

provare questo:

using System; 

public class FindLCM 
{ 
    public static int determineLCM(int a, int b) 
    { 
     int num1, num2; 
     if (a > b) 
     { 
      num1 = a; num2 = b; 
     } 
     else 
     { 
      num1 = b; num2 = a; 
     } 

     for (int i = 1; i < num2; i++) 
     { 
      if ((num1 * i) % num2 == 0) 
      { 
       return i * num1; 
      } 
     } 
     return num1 * num2; 
    } 

    public static void Main(String[] args) 
    { 
     int n1, n2; 

     Console.WriteLine("Enter 2 numbers to find LCM"); 

     n1 = int.Parse(Console.ReadLine()); 
     n2 = int.Parse(Console.ReadLine()); 

     int result = determineLCM(n1, n2); 

     Console.WriteLine("LCM of {0} and {1} is {2}",n1,n2,result); 
     Console.Read(); 
    } 
} 

uscita:

Enter 2 numbers to find LCM 
8 
12 
LCM of 8 and 12 is 24 
+10

Grazie ma vorrei imparare quello che sto facendo e non solo prendere da qualcun altro. –

1

Prova questa

int number1 = 20; 
int number2 = 30; 
for (tempNum = 1; ; tempNum++) 
{ 
    if (tempNum % number1 == 0 && tempNum % number2 == 0) 
    { 
     Console.WriteLine("L.C.M is - "); 
     Console.WriteLine(tempNum.ToString()); 
     Console.Read(); 
     break; 
    } 
} 

// output -> L.C.M is - 60 
+0

Funziona ma richiede più tempo rispetto all'altra risposta. , +1 – Renan

25

Ecco un'implementazione più efficiente e concisa del calcolo Least Common Multiple che sfrutta la sua relazione con il più grande fattore comune (ovvero il più grande divisore comune). Questa funzione di Festo fattore comune utilizza l'algoritmo di Euclide che è più efficiente delle soluzioni offerte dall'utente 1211929 o Tilak.

static int gcf(int a, int b) 
{ 
    while (b != 0) 
    { 
     int temp = b; 
     b = a % b; 
     a = temp; 
    } 
    return a; 
} 

static int lcm(int a, int b) 
{ 
    return (a/gcf(a, b)) * b; 
} 

Per ulteriori informazioni vedere gli articoli di Wikipedia su di calcolo LCM e GCF.

+0

Per più di due numeri, vedere http://stackoverflow.com/a/29717490/68936 – Jimmy

0

Ecco una soluzione ricorsiva. Potrebbe essere su qualche domanda di intervista. Spero che aiuta

public static int GetLowestDenominator(int a, int b, int c = 2) 
    { 
     if (a == 1 | b == 1) { 
      return 1; 
     } 
     else if (a % c == 0 & b % c == 0) 
     { 
      return c; 
     } 
     else if (c < a & c < b) 
     { 
      c += 1; 
      return GetLowestDenominator(a, b, c); 
     } 
     else 
     { 
      return 0; 
     } 
    } 
0
 int num1, num2, mull = 1; 

     num1 = int.Parse(Console.ReadLine()); 
     num2 = int.Parse(Console.ReadLine()); 

     for (int i = 1; i <= num1; i++) 
     { 
      for (int j = 1; j <= num2; j++) 
      { 
       if (num1 * j == num2 * i) 
       { 
        mull = num2 * i; 
        Console.Write(mull); 
        return; 
       } 
      } 
     } 
0

qui è molto soluzione ottimizzata per la ricerca di LCM.

private static void lcmOfNumbers(int num1, int num2) 
    { 
     int temp = num1 > num2 ? num1 : num2; 
     int counter = 1; 
     while (!(temp % num1 == 0 && temp % num2 == 0)) 
     { 
      temp = temp * counter; 
      counter++; 
     } 
     Console.WriteLine("Answer: "+temp); 
    }