Skocz do zawartości

  •  
  • Mini kompendium
  • MimeTeX
  • Regulamin

Zdjęcie

Bułki

LICEUM

  • Nie możesz napisać tematu
  • Zaloguj się aby odpowiedzieć
3 odpowiedzi w tym temacie

#1 Azaks

Azaks

    Operator całkujący

  • ^Przyjaciele
  • 564 postów
17
Mały Pomocnik I
  • Płeć:Mężczyzna

Napisano 08.01.2014 - 19:24

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 2^nbułek Maciuś łączy zawsze z zakupem n 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 nie mniejsza 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 B 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

 

#include <iostream>


using namespace std;

int main()
{int n,s=0;
cin>>n;
while(n!=1 && n!=0)
{ n=n/2;
s=s+1;
}
if(n==1)
cout<<s+1<<endl;
else
cout<<s<<endl;

return 0;
}

 

Dostaję  60% za to , wiem jaki popełniam błąd , ale nie wiem jak go poprawić.


  • 0

Afroman

    Kombinator

  • Użytkownik
3
  • Płeć:Kobieta

Napisano 25.09.2011 - 17:55

#2 hmm

hmm

    Operator całkujący

  • VIP
  • 478 postów
312
Instruktor I
  • Płeć:Mężczyzna

Napisano 11.01.2014 - 13:09

Jeśli mam poprawić Twój kod, to mogę to zrobić tak:

#include <iostream>
using namespace std;

int main()
{
  int n,s=0,r=0;
  cin>>n;
  while(n!=1 && n!=0)
  {
    if(n%2==1) r=1;
    s=s+1;
    n=n/2;
  }
  if(n==1)
  cout<<s+r<<endl;
  else
  cout<<"Nieprawidłowa ilość bułek"<<endl;

  return 0;
}

Według mnie ilość bułek powinna być dodatnia, stąd przedostatnia linijka. A istotne zmiany są takie: dodałem zmienną r o początkowej wartości zero. Potem w pętli sprawdzam dodatkowo, czy po podzieleniu przez potęgę dwójki nie wyszła liczba nieparzysta. Jeśli choć raz tak było, wtedy n nie jest potęgą dwójki i ustawiam wartość r=1. Na koniec zwracam s+r.

 

A gdybym miał napisać to od początku, to może w ten sposób:

#include <iostream>
using namespace std;

int main()
{
	int n,s=1,i=0;
	cin>>n;
	if(n<1) cout<<"Nieprawidłowa ilość bułek"<<endl;
	else {
		while(s<n){
			 s*=2;
			 i+=1;
		}
		cout<<i<<endl;
	}
  return 0;
}

  • 1

#3 wsed

wsed

    Nowicjusz

  • Jr Użytkownik
  • 3 postów
0
Neutralny
  • Płeć:Mężczyzna

Napisano 12.06.2016 - 22:09

Testowałem i u mnie na tym kodzie wywalało błąd.

Czy na pewno jest poprawnie napisany?


  • 0

#4 Jarekzulus

Jarekzulus

    Wielki Analityk

  • +Mods
  • Redaktor
  • 3365 postów
3039
Profesor
  • Płeć:Mężczyzna

Napisano 12.06.2016 - 23:27

Testowałem i u mnie na tym kodzie wywalało błąd.

Czy na pewno jest poprawnie napisany?

 

Może jakiś szczegół - jaki błąd Ci wyskakuje?


  • 0

:wave: :wave: :wave: Jeśli rzuciłem choć promyczek światła na problem który postawiłeś - podziękuj. pre_1433974176__syg.jpgNad kreską






Tematy podobne do: Bułki     x