Zgłaszanie | Wszystkie zgłoszenia | Najlepsze | Lista |
MBZLICZ - Policz podzielniki |
Parę dni temu otrzymałem wiadomość od pani profesor Marii Sędziospoj. Skarży się w niej na przepracowanie, bezsenność, bóle głowy i kręgosłupa oraz kłopoty ze wzrokiem. Narzeka też, że musi strasznie dużo zużywać papieru i tuszu na swojej wysłużonej drukarce igłowej a już szczególnie jak sprawdza zadanie "Już po EURO! ;-(" i drukuje tysiące liczb, spoko, koko i spokokoko. Strasznie ją to wkurza i prosi mnie, jako autora tamtego zadania, abym coś z tym zrobił. Wpadłem na genialny w swojej prostocie pomysł i zaproponowałem, aby liczyć tylko wystąpienia linii nie zawierających liczb i porównywać ze wzorcem. Wiem, że nie jest to pewne na 100% sprawdzenie, ale w ten sposób można odfiltrować złe odpowiedzi a pozostałe sprawdzić tradycyjnie. Pani Sędziospoj pomysł przypadł do gustu, ale wykonanie już niekoniecznie. Stwierdziła, że w moim programie nie ma wcięć i są makra, że chyba napisałem go na kolanie [to prawda] i że program jest za wolny. Dlaczego, Ty, nie mógłbyś, napisać [na wczoraj] fajniejszy, w dowolnym języku taki właśnie program. Dzięki temu, profesor Sędziospoj będzie miała więcej czasu na sędziowanie, na przeliczanie rankingu i wyświetlanie go w ładniejszej formie ;-).
PS
Pani Mari pomysł tak przypadł do gustu, że chce mieć bardziej uniwersalne narzędzie do sprawdzania podzielności wielu liczb w możliwie dużym zakresie liczbowym i różnej formie wprowadzania i wyprowadzania danych. Aby sprawdzić popawność działania programów, pani Profesor przygotowała następujące testy (trzeba zaliczyć minimum 4):
TESTY
TEST nr 1. 100 malejących liczb, każda liczba w oddzielnej linii, dokładnie tak jak w zadaniu MBSPOKO "Już po EURO!". Odpowiedzią, jest jedna liczba, można ją bardzo łatwo obliczyć dowolną metodą. Ten test jest kategorii "łatwiejszy niż łatwy". ;-) |
TEST nr 2. Najpierw ilość zestawów Z, potem w Z liniach liczby a, b, dolna i górna granica zakresu zbioru liczb naturalnych, następnie liczba n a na końcu od k1 do kn liczb, dla których będziemy sprawdzać podzielność liczb ze zbioru {a,b}. Zakresy: Z<100; 100<=b<2^31, n<=4; k1 .. kn>0 Wejście: 2 3 1001 2 3 5 9 2000 4 9 11 13 15 Wyjście: 467 581 |
TEST nr 3. Brak danych. Plik z kilku pustymi liniami lub innymi "białymi" znakami. Program musi wypisać tekst: |
TEST nr 4. Brak danych. Plik zawiera tekst i liczby nie spełniające założeń zadania - pojedyńcze liczby mniejsze od 100. Program musi wypisać tekst: |
TEST nr 5. Wejście: 2 1 100 2 3 5 komentarz pusta linia lub linia z tekstem - traktowana joko komentarz 1 100 2 3 5 Wyjscie: 47 47 |
TEST nr 6. Jak test 5 ale zamiast ciągu 100 liczb [test nr 1] może pojawić się większy lub mniejszy od 100 ciąg malejących liczb. Po obliczeniu jak dla 100 liczb, dodatkowo w następnej linii, tylko gdy ich liczba była różna od 100, należy wypisać komunikat błędu z podaniem ilości wczytanej sekwencji liczb np dla 101: Wartość n w następnych testach będzie przeważnie pomijana. Jeżeli z obliczeń będzie wynikała błędna wartość n, to należy potraktować ją jako pierwszą wartość k - wartość k1. Wejście: 100 // liczbę 96, ponieważ nie jest kontynuacją 100 ..., traktujemy jako wartość Z [96<100] i ją pomijamy Wyjście:: |
TEST nr 7. Jak test 2 ale większe zakresy tzn b >> 2^64 [dużo wieksze ] Wejście: 3 1 111111 2 3 5 Wyjście: 51852 |
TEST nr 8. Pomieszane wszystkie zestawy i dodatkowo n przed "uproszczeniem" może być większe od 12. Wejście: 10 // pomijamy błędne Z
10000 // poniżej jest liczba 9999, o 1 mniejsza - więc 10000 jest traktowane jako początek ciągu 100 liczb 9999 Wyjście: 4667 47 error-2 zamiast 100 --> 2 wartosci! |
TESTY nr 9 i 10. Jeżeli w treści testu w dowolnej linii na jej początku wystąpi litera 'v' poprzedzona '-', powinna być potraktowana jako "przełącznik -v" włączjąca i wyłaczająca wyświetlanie uproszczonej ramki i rozszerzonego wyniku obliczeń. Ramka jest zawsze zamykana albo drugim przełącznikiem -v albo gdy jest koniec pliku. Nagłówek ramki składa się z tekstu: 'granice zbioru: a b, dzielniki [k1, .., kn], wynik' i 2 linii z 52 znaków '='. Zakończenie ramki to 52 znaki '-'. Przełączniki mogą się pojawiać wielokrotnie, włączając i wyłączając wyświetlanie tabelki. Wejście: -v 1000 1000 3 1000 5 1000 15 -v // nadmiarowy -v, koniec pliku powoduje to samo, narysowanie dolnej krawędzi tabelki. Wyjście: ==================================================== granice zbioru: a b, dzielniki [k1, .., kn], wynik ==================================================== 1 1000 [3, 5] 467 1 1000 [3] 333 1 1000 [5] 200 1 1000 [15] 66 ---------------------------------------------------- |
Dodane przez: | narbej |
Data dodania: | 2012-06-21 |
Limit czasu wykonania programu: | 0.200s |
Limit długości kodu źródłowego | 50000B |
Limit pamięci: | 1536MB |
Cluster: | Cube (Intel G860) |
Języki programowania: | All except: GOSU |
Pochodzenie: | Ross K.A., Wright Ch.R.B.: "Matematyka dyskretna", wydanie 5, PWN 2008 |