Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Zadanie


Rekomendowane odpowiedzi

Opublikowano

Siema, pomógł by mi ktoś z rozwiązaniem tego zadania? Główkuję, główkuję i nic. Tu chyba trzeba użyć pętli

 

Maciuś codziennie rano chodzi do piekarni po bułki. Chłopiec wyznaje zasadę, że liczba bułek, które kupuje, zawsze musi być potęgą dwójki. Dodatkowo, zakup bułek Maciuś łączy zawsze z zakupem lizaków. Niestety mama Maciusia nie może tego zrozumieć i liczba bułek, które każe mu kupić nie zawsze jest potęgą dwójki. Jeśli tak nie jest, chłopiec kupuje więcej bułek niż zamawiała mama - liczba kupowanych przez niego bułek to najmniejsza potęga dwójki niemniejsza od liczby bułek zamawianych przez mamę.

Tak więc, gdy np. mama Maciusia zamówi 8 bułek, chłopiec posłusznie kupi 8 bułek i 3 lizaki. Jednak gdyby mama zamówiła 9 bułek, Maciuś musiałby kupić już 16 bułek i 4 lizaki.

Dla danej liczby bułek zamawianych przez mamę wyznacz, ile lizaków kupi Maciuś.
Wejście

W pierwszej linii wejścia znajduje się jedna liczba całkowita () oznaczająca liczbę bułek zamówionych przez mamę Maciusia.
Wyjście

Program powinien wypisać jedną liczbę oznaczającą liczbę lizaków zakupionych przez Maciusia.
Przykład

Dla danych wejściowych:
9

poprawną odpowiedzią jest:
4

Pomogłem ? Możesz odwiedzić mój kanał YouTube: http://www.youtube.com/user/RedioSGames?feature=mhee

Opublikowano

Chyba nie wkleiłeś całego polecenia... brak informacji o tym na czym polega ilość lizaków (wnioskuje że jest to liczba potęgi do której macius musi podniesc 2 zeby uzyskac satysfakcjonujaca go liczbe bulek)

brak również informacji o tym jak duże mogą być dane wejściowe (takie info zazwyczaj jest podawane) co moim zdaniem jest znaczące jeżeli chcemy uzyskac optymalne rozwiazanie.

 

#include <iostream>

using namespace std;

unsigned int ret_p(unsigned int a){ // return 2^a
unsigned int ret=1;

if(a==0) return 1;
for(int i=0; i < a; i++) {
ret =  ret *2;
}

return ret;
}

int main()
{
    unsigned int zam;
    cin>> zam;
    if(zam==1) { // if mama zamowi 1 bulke to potega do ktorej trzeba podniesc 2 wynosi zero czyly zero lizakow
    cout <<0;
    return 0;
    }
    for(unsigned int i=0; i< 0xffffffff; i++)  { // od 0 do max_unsinged_int 
               if(zam == ret_p(i)) {  // jezeli zam jest I-tą potęgą dwojki tzn że macius kupi i lizkaów
                cout <<i;
                break;
            }
            if(zam < ret_p(i)) { // jezli znajdziemy PIERWSZA liczbe wieksza od zam tzn ze ta liczba bedzie  liczba bulek ktora kupi macius, i liczba lizakow bedzie wynosila i, poniewaz do tej potegi macius musialby podniesc 2
                cout  << i;
                break;
            }
    }

    return 0;
}

 

Zapewne nie jest to najoptymalniejsze rozwiazanie, lecz jest poprawne wg tego co sie domyślam o co w tym zadaniu chodzi - nie podałeś calego.

 

Gdybyśmy mieli specyfikacje wejsćia to moglibyśmy zadeklarowac tablice w programie ktora przechowywałaby ente potegi dwójki (zhard kodowane) , dzięki czemu nie musielbyśmy tego liczyć runtime co byłoby bardzo szybkie.

 

Lecz trudno to zrobic nie wiedziac jaka może byc maksymalna liczba zamawianych bułek.

Pisze boty do gier WWW na zlecenie.

Opublikowano


int ile_bulek_kupic = 9; //ile bulek macius ma kupic

int bulki = 0; // ile bulek kupi

int lizaki = 0; // ile lizakow kupi

const int MAX_BULEK = 4096; //max liczba bulek. powinna byc potega 2

for(int i=1;i<sqrt(MAX_BULEK);i++)

{

int pot = (int)pow(2, i);

if(pot >= ile_bulek_kupic)

{

bulki = pot;

lizaki=i;

break;

}

}

Resztę sobie sam dopiszesz :)

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...