Wpis z mikrobloga

Mam do napisania algorytm:

Dane są trzy operację, A dodaje do liczby 3, B podwaja liczbę, C zamienia miejscami dwie ostatnie cyfry. Napisz program, który sprawdzi czy w maksymalnie n krokach da się operacjami A, B, C doprowadzić k do liczby pierwszej i wypisze kolejność. Użyj rekurencji:

Załóżmy że mamy zdefiniowaną funkcję bool czypierwsza(int n) która zwraca czy liczba jest pierwsza.

int a będzie odpowiadało za wykonanie jednej z tych operacji.

bool czydasie(int liczba, int n, int a)

{

if(czypierwsza(liczba))

{

return true;

}

if(n==0)

{

return false;

}

switch(a )

{

case 1:

wykonuje operacje A

case 2:

wykonuje operacje B

break;

case3:

wykonuje operacje C

break;

}

return czydasie(liczba,n-1,1)||czydasie(liczba,n-1,2)||czydasie(liczba,n-1,3);

}

Wydaje mi się że to powinno działać. Mam tylko problem bo nie wiem jak zrobić tak żeby wypisywać kolejność. Jak to zmodyfikować żeby działało tak jak jest napisane w zadaniu?

#problem #programowanie #algorytmika #algorytmy
  • 12
@gentelman: W rekurencji wchodzę coraz głębiej jakby rozdzielając się na 3 możliwości (odpowiednio wykonanie operacji A,B,C) aż do momentu kiedy nie wyczerpie już ilości dozwolonych operacji.
@1608:

Naniosłem takie poprawki ale to tyko szkic myśli. Być może trzeba będzie na moje poprawki nanieść następne poprawki :-)

ścieżka to lista stringów

bool pomocnicza - ma sprawić by podczas sprawdzania w case'ach nie śmiecić w liście

bool czydasie(int liczba, int n, int a,bool pomocnicza)

{

if(czypierwsza(liczba))

{

return true;

}

if(n==0)

{

return false;

}

switch(a )

{

case 1:

wykonuje operacje A

if(!pomocnicza){

if(czydasie(liczba,n-1,1,true)||czydasie(liczba,n-1,2,true)||czydasie(liczba,n-1,3,true)) sciezka.add(„A”);

}

break;

}
@rafbur: Dobra, widzę ja chciałem napisać funkcję i wywoływać ją kolejno dla parametru a równego 1,2,3. A ty zrobiłeś to lepiej bo w jednej funkcji tak jak było napisane w treści zadania. Z jaką wartością "pomocnicza" chcesz uruchomić pierwsze wywołanie tej funkcji ?
@1608:

Z wartością false. Wszystko co działo się w wersji którą przedstawiłeś na początku traktuje jako główne zadanie funkcji. Ja to główne zadanie poszerzyłem o zapisywanie do listy. Z kolei wewnątrz case'ów potrzebowałem użyć naszej funkcji do sprawdzenia czy idziemy dobrą drogą ( i tylko w przypadku dobrej zapisywać) ale jednocześnie nic nie zapisywać by uniknąć bałaganu w liście.