Головоломка с двумя кувшинами - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь разгадать две головоломку с кувшином воды , используя евклидов алгоритм и диофантово уравнение.

  1. let gcd (m, n) = g
  2. используя евклидово альдортим, мы получаем X 'и Y' такие, что mX '+ nY' = g

для mX + nY = d

  1. , если d% g! = 0 решение не существует
  2. иначе я сделал X 'как X' / g * d и Y 'как Y' / g * d

это одно решение для mX + nY = d

теперь несколько решений по m (X '+ (k * n / g)) + n (Y' - (m * k / g)) = d

i просто необходимо вывести СУММА НЕТ. ОПЕРАЦИИ

Итак, я думаю о решении как X '+ Y' + k * (n - m) / g, и я хочу минимизировать этот

мой код ниже для того же (его давать неправильные ответы ...)

   int X, Y;

   int gcd(int a, int b)
   {
       if (b == 0)
       {
           X = 1;
           Y = 0;
           return a;
       }
       int g = gcd(b, a % b);
       int X1 = Y;
       int Y1 = X - (a / b) * Y;
       X = X1;
       Y = Y1;
       return g;
   }



    cin >> m >> n >> d;
    int g = gcd(n, m);
    if (d % g)
        cout << -1 << endl;
    else
    {
        X = X / g * d;
        Y = Y / g * d;
        int ans = X + Y;
        int mn = ans;
        while (ans > 0)
        {
            ans += ((m - n) / g);
            mn = min(ans, mn);
        }
        while (ans < 10000)
        {
            ans += ((n - m) / g);
            mn = min(ans, mn);
        }
        cout << mn << endl;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...