web-dev-qa-db-ja.com

最小公倍数

私は現在gotoであった現在のコーディングを持っていますが、それが眉をひそめているのでもうgotoを使わないように言われました。しばらくの間ループに変更するのに問題があります。私はC#とプログラミング全般にかなり慣れているので、このいくつかはまったく新しいものです。任意の助けいただければ幸いです。実際の質問は2つの数値を入力し、最小公倍数を見つけます。

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

   }
20
Tristan M.

これを試して:

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

出力:

Enter 2 numbers to find LCM
8
12
LCM of 8 and 12 is 24
11
user1211929

以下は、最大公約数(別名最大公約数)との関係を利用する最小公倍数計算のより効率的で簡潔な実装です。このGreatest Common Factor関数は、user1211929またはTilakが提供するソリューションよりも効率的なEuclidのアルゴリズムを使用しています。

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

詳細については、ウィキペディアのコンピューティングに関する記事 [〜#〜] lcm [〜#〜] および [〜#〜] gcf [〜#〜] を参照してください。

35
AffluentOwl

これを試して

 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
1
Tilak

これが再帰的な解決策の1つです。それはいくつかのインタビューの質問にあるかもしれません。それが役に立てば幸い

    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
Vlada

LCMを見つけるための最適化されたソリューションを次に示します。

 private static int lcmOfNumbers(int num1, int num2)
    {
        int temp = num1 > num2 ? num1 : num2;
        int counter = 1;
        while (!((temp* counter++) % num1 == 0 && (temp* counter++) % num2 == 0)) {
        }
        return temp* (counter-2);
    }
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
Arthur