Algorytm NWW(a, b).



Podczas jednej z rozmów kwalifikacyjnych zadano mi zadanie zaprogramowania funkcji NWW, jako, że matematyka jest bardzo ciekawą i ekscytującą dyscypliną życia w której drzemie nieposkromiona energia pragnę przedstawić swoją wersję wyznaczenia NWW którą udało mi się "z palca" napisać podczas tej rozmowy, teraz wygląda trochę ściślej pewnie niż na rozmowie, ale algorytm jest ten sam ;)

Oto moje dzieło:
/**
 * Wersja przed poprawką
 * @param a
 * @param b
 * @return
 */
int nww(int a, int b)
{
  int min = min(a,b);
  int max = max(a,b);
  for(int j=1; j < max ; j++)
  {
        for(int i=j;i<=(j+1);i++)
        {
                if(min*i==max*j)
                    return min*i;
                if(j==min)
                    return max*j;
        }
  }
  return 0;
}

/**
 * Wersja po poprawce
 * @param a
 * @param b
 * @return
 */
public int nww(int a, int b)
{
  int minimum = min(a,b);
  int maximum = max(a,b);
  int lowValue,
  int highValue;
  int k = 0;
  
  for(int j=1; j < maximum ; j++)
  {
        k=j+1;

        for(int i=j;i<=k;i++)
        {
                lowValue = minimum*i;
                highValue = maximum*j;

                if(c==highValue)
                    return minimum*i;
                if(j==min)
                    return maximum*j;
                if(lowValue<=highValue)
                    k++;
        }
  }
  return 0;
}

1 komentarz: