• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie funkcje

VPS Starter Arubacloud
0 głosów
165 wizyt
pytanie zadane 16 czerwca 2017 w C i C++ przez pajac Nowicjusz (210 p.)

Proszę o pomoc w tym zadaniu nie wiem jak mam się do niego zabrać. Język C++.

Zadanie:

Napisz dowolnym sposobem funkcję
long c_n(long n, long p)
która oblicza n-ty wyraz ciągu określonego równaniem rekurencyjnym:

c_0 = p

c_n = \displaystyle{\frac{c_{n-1}}{2}} gdy: n>0 oraz c_{n-1} jest parzysta

c_n = 3c_{n-1} + 1 gdy: n>0 oraz c_{n-1} jest nieparzysta

Należy napisać także funkcję main, która przetestuje napisaną funkcję.

1 odpowiedź

0 głosów
odpowiedź 16 czerwca 2017 przez d0n Mądrala (6,440 p.)
edycja 16 czerwca 2017 przez d0n
long c_n(long n, long p) {
	while (n--) 
 		p = (p%2?3*p+1:p/2);
 	return p; 
}

Ogólnie to coś takiego może wyjść poza zakres int'a (to samo co long), więc nie zawsze zwróci dobry wynik.
Wersja bardziej czytelna i lepsza (choc nie idealna):

typedef unsigned long long ull;
ull c_n( int n, ull p ) {
	while ( n-- ) {
		if ( p % 2 == 0 )
			p /= 2;
		else
			p = 3 * p + 1;
	}
	return p;
}

Korzysta z zmiennej o większym zakresie, ale  nadal może dawać złe wyniki (tylko juz z baaardzo małą szansą na błąd)

komentarz 16 czerwca 2017 przez Munvik Dyskutant (9,350 p.)
Nie dajemy gotowych rozwiązań
komentarz 16 czerwca 2017 przez pajac Nowicjusz (210 p.)
Nie chce gotowego rozwiązania tylko podpowiedzi jak do takiego programu się zabrać, żeby działał.
komentarz 16 czerwca 2017 przez Munvik Dyskutant (9,350 p.)
Napisałem to do d0n'a, bo napisał gotowe rozwiązanie
komentarz 17 czerwca 2017 przez d0n Mądrala (6,440 p.)
Stwiedziłem, że skoro nie napisałem funkcji main o którą jest prośba w pytaniu to nie dałem gotowej odpowiedzi. Uznałem też, że polecenie tego zadania jest tak wprost, rozwiązanie tego zadania to praktycznie przepisanie polecenia, nie znalazłem tu pola do podpowiedzi. Wiem jaka jest zasada na forum i zgadzam się, że napisałem trochę za dużo, ale trudno było o inne wyjście.
komentarz 17 czerwca 2017 przez d0n Mądrala (6,440 p.)
Nie mówiąc o tym, że jest jeszcze rozwiązanie rekurencyjne, a to co napisałem to co najwyżej podpowiedź do idealnego rozwiązania, bo wykorzystuje zmienne, które dla odpowiedniego p będą miały overflow, podpowiedzią do idealnej implementacji było by: napisz za pomocą biblioteki string własną arytmetykę, bez ograniczeń na ilość cyfr, ale myślę, że taka podpowiedź nie była by pomocna

Podobne pytania

0 głosów
1 odpowiedź 274 wizyt
pytanie zadane 10 grudnia 2015 w C i C++ przez wiktortr Początkujący (250 p.)
0 głosów
1 odpowiedź 170 wizyt
0 głosów
2 odpowiedzi 121 wizyt
pytanie zadane 15 czerwca 2020 w Rozwój zawodowy, nauka, praca przez Damian12345 Bywalec (2,940 p.)

92,454 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...