matematykaszkolna.pl
liczba B-narcystyczna liczba B-narcystyczna: Napisz program, który sprawdza czy liczba x jest B−narcystyczna (preferuję C++/pseudokod). Liczba x jest B−narcystyczna, jeśli jej zapis w systemie o podstawie B ma n cyfr, których suma n−tych potęg jest równa x. Np. liczba 289 jest 5−narcystyczna, bo 289=(2124)5=2*53+1*52+2*5+4 oraz 289=w4+14+24+44.
17 lip 20:05
Blee: Czyli ze co ... czekasz aż MY Ci podamy kod w C++ (bo jego preferujesz) No chyba kogoś pogrzało lekko
17 lip 20:23
Blee: Wybacz, ale nie mam bladego pojęcia jak niby 289 jest 5−narcystyczna. Trochę inaczej liczby narcystyczne się definiuje.
17 lip 20:27
liczba B-narcystyczna: Tylko, że to nie są liczby narcystyczne, tylko B−narcystyczne. Wymyślone przez autora zadania, jakby narcystyczne tylko trochę przerobione. W treści podana jest przytoczona definicja. Ja napisałem program, ale nic nie działa. Dostałem poniższy pseudokod, który teoretycznie jest poprawny. Przykładowe prawidłowe rozwiązanie: m ← n; d ← 0; dopóki m>0 wykonuj m ← m div B; d ← d+1; m ← n; suma ← 0; dopóki m>0 wykonuj suma ← suma + potega( m mod B, d ); m ← m div B; jeżeli suma=n zwróć TAK i zakończ w przeciwnym razie zwróć NIE i zakończ gdzie potega(x, n) oblicza x do potęgi n np. w następujący sposób: potega(x,n) jeżeli n = 0 zwróć 1 i zakończ w przeciwnym razie zwróć x*potega(x, n−1) i zakończ Napisany przeze mnie program: #include <iostream> using namespace std; int potega (int x, int n) { if (n==0) return 1; else x*potega(x,n−1); } int main() { int n; cin>>n; int B; cin>>B; int m; int d; int suma; m=n; d=0; while(m>0) { m=m/B; d=d+1; } m=n; suma=0; while(m>0) { suma=suma+potega(m%B,d); m=m/B; } cout<<suma; if (suma==n) cout << "TAK"; else cout << "NIE"; return 0; }
17 lip 21:42
Pytający: "napisałem program, ale nic nie działa" Niezbyt precyzyjne stwierdzenie. Twój powyższy kod się oczywiście nie skompiluje. Wystarczy przeczytać komunikat kompilatora i poprawić przeoczenie zamiast stwierdzać "nic nie działa"... Bo poza tym działa (dla odpowiednio małych danych): https://ideone.com/dWJ2DF
17 lip 22:09
liczba B-narcystyczna: Hmm mi się kompiluje. Chodzi mi jedynie o to że podaje niepoprawne komunikaty. Wiem że np. liczba 3433 jest 6−narcystyczna. Niestety uzyskuję odpowiedź NIE.
17 lip 22:56
liczba B-narcystyczna: Dziękuję za pomoc, po Twojej poprawce działa. Nie za bardzo tylko rozumiem, w którym miejscu dokonały zostały istotne zmiany. Mogę prosić o wyjaśnienie?
17 lip 23:00
liczba B-narcystyczna: *dokonane
17 lip 23:02
jc: Funkcja w języku Python. def test(n,p): m = n s = 0 while m > 0: r = m%p s += r**(p−1) m /= p return s == n print test(289,5) print test(3433,6) print test(123,7)
17 lip 23:13
Pytający: Ok, może się skompilować, zależy od kompilatora. Napisałeś: int potega (int x, int n) { if (n==0) return 1; else x*potega(x,n−1); } Znaczy się zabrakło "return" i w związku z tym zwracana wartość jest niezdefiniowana dla n≠0. Jc, sprawdź test(2,3).
18 lip 00:01
liczba B-narcystyczna: Racja. Dziekuje Pytający
18 lip 07:55