Program wskazujący najkrótsze rozwiązanie

0

Witam, chciałem podzielić się problemem który miałem do napisania podczas testów na Codility.
Program posiada dwie komendy: commandL ktora zmienia liczbe L (typu int) na 2L-R oraz commandR ktora zmienia liczbe R na 2R-L.
Poczatkowe wartosci L=0 i R=1.
Funkcja miala polegac na tym ze dla zadanej wartosci X zwroci najmniejsza mozliwa liczbe uzyc komend L i R aby ktoras z liczb L lub R uzyskala wartosc X.
Dla przykladu dla X= -11 funkcja miala zwrocic 4 (poniewaz najkrotsza droga do uzyskania tych liczb bylo uzycie komend L -> L -> R -> L).

W glowie mam pomysly, ale niestety zaden z nich nie wypalil. Moze ktos poradzi?

1

Czy tak będzie dobrze ?

#include <iostream>
#include <cmath>

using namespace std;

int codility(int X){
  int distance = X > 0 ? X - 1 : -X;
  double q;
  if(distance < 1) return 0;    
  q = log2(distance + 1);
  return ceil(q);
}

int main(){
  
  cout << codility(-11) << endl;
  cout << codility(0) << endl;
  cout << codility(1) << endl;
  cout << codility(2) << endl;
  cout << codility(3) << endl;
  cout << codility(4) << endl;
  cout << codility(5) << endl;
  cout << codility(11) << endl;
  cout << codility(16) << endl;
  cout << codility(17) << endl;
  
  return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1