matematykaszkolna.pl
Liczba, której iloczyn jest równy N ZosiaZamoyska: Szukam czegoś co można by nazwać wzorem... Zadanie brzmi tak: "Adam wymyślił nową zagadkę. Polega ona na znalezieniu najmniejszej liczby , której iloczyn cyfr jest równy N". Liczba 1 ≤ N ≤ 109 ... Pomoże ktoś jakiś pomysł znaleźć? (np. dla N=18, jest to liczba 29, bo 2*9=18)
13 kwi 15:43
Draghan: Witaj, Zosiu emotka To jest zadanie z informatyki, tak? emotka Nie mam pojęcia, jak można by to było rozwiązać matematycznie, ale np. w formie programu to jest banalne do wykonania emotka Oczywiście, jeśli chodzi o zadania z olimpiad, to raczej nie można za mocno podpowiadać?
13 kwi 16:53
ZosiaZamoyska: Tak, to jest z informatyki Ale to nie z olimpiady, olimpiada skończyła się ( I etap ) 9 stycznia, a II etap był 22 marca, a do III nie przeszłam Jeśli chcesz pomóc z pomysłem na program, to zajrzyj tu: http://forum.4programmers.net/C_i_C++/232230-latwiejszy_sposob_na_rozwiazanie_zadania?p=1026241#id1026241 emotka Dzięki, jeśli pomożesz...
13 kwi 17:00
głupmen: pewnie, że można to za pomocą wzoru obliczyć, ale tak jak kolega wyżej wspomniał − wynik musi analizować program komputerowy, gdyż nie jest to jeden konkretny a kilkanaście+
13 kwi 17:00
Draghan: C++ emotka
13 kwi 17:01
głupmen: @Zosia mogę to za ciebie napisać, ale jest to banalna sprawa i boję się, że przestałaś na tym etapie myśleć, spróbuj rozrysować to na bloczkach, będzie ci łatwiej.
13 kwi 17:03
ZosiaZamoyska: No a jakże
13 kwi 17:03
ZosiaZamoyska: Nie chodzi o to, by ktoś za mnie napisał, bo pisać to ja umiem, ale o sam pomysł, szybszy niż mój
13 kwi 17:04
ZosiaZamoyska: Chociaż nie do końca rozumiem, co masz na myśli pod słowem "bloczki"...
13 kwi 17:04
głupmen: co masz na myśli: szybszy?
13 kwi 17:04
głupmen: @Zosia schemat blokowy ułatwia wyznaczenie opisu matematycznego, który może usprawnić wdrożenia owego problemu do programu
13 kwi 17:06
Trivial: Oczywiście można tutaj użyć schematu blokowego, ale nie mam zielonego pojęcia w jaki sposób miałby ułatwić "wyznaczenie opisu matematycznego". Schematy blokowe są strasznie niskopoziomowe i zorientowane na szczegóły, co przy projektowaniu jest zazwyczaj przeszkodą. Co do samego problemu... Rozwiązanie jest dość proste. Aby zadanie dało się rozwiązać musi zachodzić: N = 2c2 * 3c3 * 4c4 * ... * 9c9 gdzie liczby ck są naturalne (z zerem) oraz przynajmniej jedno ck ≠ 0. Powiedzmy, że liczbę N da się rozłożyć w opisany wyżej sposób. Zauważmy, że najmniejszą liczbę X spełniającą warunki zadania otrzymamy dla: 1) Minimalnej ilości cyfr liczby X (czyli minimalnej sumy c2 + c3 + ... + c9). 2) Takiego ustawienia cyfr liczby X, aby najmniejsze były "na początku", a największe "na końcu". Powyższe warunki narzucają unikalny rozkład, który można obliczyć algorytmem zachłannym. Przebieg: 1. Każdemu ck przypisujemy na początku 0. 2. Dla k = 9, 8, 7, ..., 2: 3. Sprawdzamy czy N jest podzielne przez k. 4. Jeśli tak to ck ← ck + 1, dzielimy N przez k oraz wracamy do kroku (3). 5. Jeśli nie to przechodzimy do następnego k. Poszukiwaną liczbę X tworzą kolejno: X = c2 dwójek, c3 trójek, ..., c8 ósemek, c9 dziewiątek. Wprawny czytelnik zauważy, że dla N = 1 powyższy rozkład nie istnieje, ale wtedy po prostu X = 1. Dodatkowo to, czy liczbę N da się rozłożyć można wykryć w zależności od wartości N po wykonaniu algorytmu. Jeśli końcowe N ≠ 1, to rozwiązanie nie istnieje.
14 kwi 21:09
Trivial: I rozwiązanie dla dowolnego N: http://ideone.com/et9Kaj emotka
14 kwi 21:50
Draghan: emotka Podziwiam emotka Zastanawia mnie, co to za język, ten Haskell? Aż chyba sobie o nim poczytam Trivial, jakie są jego główne zastosowania? emotka
14 kwi 22:11
Trivial: To język badawczy ogólnego przeznaczenia, ale ostatnio zyskuje popularność także poza researchem. Ma kilka osobliwych cech, które skutecznie rozsadzają głowy tradycyjnych programistów imperatywnych. Między innymi: (1) Nie pozwala na żadne mutacje "zmiennych". (2) Skoro mutacje nie są możliwe, to nie ma pętli. (3) IO realizowane jest poprzez użycie monad importowanych wprost z teorii kategorii. (4) Nic nie jest obliczane dopóki nie jest potrzebne (tzw. lazy evaluation). (5) Wszystkie funkcje są tak naprawdę funkcjami jednej zmiennej co umożliwia bardzo proste wykorzystanie tzw. partial application. (6) Klasy typów (ang. type classes) umożliwiają zupełne inne podejście do polimorfizmu, które w wielu zastosowaniach sprawdza się dużo lepiej niż podejście tradycyjne. (7) Przerobienie programu, który wykonuje się na jednym procesorze na taki, który działa równolegle na wszystkich rdzeniach jest często trywialnie proste (np. dodanie jednej linijki). I wiele innych... Poza tym na zawsze zmienia sposób myślenia o projektowaniu funkcjonalności w innych językach oraz powoduje, że co rusz brakuje nam rozmaitych funkcjonalności w tych innych językach. emotka
14 kwi 22:39
Draghan: "Poza tym na zawsze zmienia sposób myślenia o projektowaniu funkcjonalności w innych językach oraz powoduje, że co rusz brakuje nam rozmaitych funkcjonalności w tych innych językach.emotka" To brzmi najbardziej intrygująco No i jeszcze brak pętli... No i wszystko inne Mamo moja... Twój program ma tylko 15 linijek! (i połowy z tego nie łapię ) W starym, dobrym C++ to wymagałoby więcej kodu. Dziękuję za opis, coraz bardziej mnie to ciekawi... emotka Miłego dnia emotka
15 kwi 09:58
Trivial: To zadanko w C++ jeszcze nie jest takie straszne. http://ideone.com/bp7vCk emotka
15 kwi 11:12
Draghan: Nie twierdzę, że straszne, tylko że ciężko byłoby to zawrzeć w 15 linijkach emotka Tak ładnie to rozpisałeś, że nawet dzieci nie powinny mieć problemu z napisaniem tego emotka Oczywiście, jak się ktoś uprze, to wszystko napisze w jednej No, w trzech, bo mamy dwie dyrektywy O jak ładnie emotka Moje nieszczęsne duble zniknęły emotka Dobre wróżki czuwają emotka Jeszcze raz życzę miłego dnia emotka
15 kwi 11:37