Ktoś wie czemu spoj mi tego nie zalicza?
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n,liczba, y, d, j;
string x;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>liczba;
if(liczba<4)
{
if(liczba==0) cout<<0<<" "<<1<<endl;
else cout<<0<<" "<<liczba<<endl;
}
else if(liczba<10)
{
if(liczba==4) cout<<2<<" "<<4<<endl;
else if(liczba==5||liczba==6||liczba==8) cout<<2<<" "<<0<<endl;
else if(liczba==7) cout<<4<<" "<<0<<endl;
else if(liczba==9) cout<<8<<" "<<0<<endl;
}
else
{
cout<<0<<" "<<0<<endl;
}
}
return 0;
}
Hej, a wie ktoś czemu mi wyrzuca timeout?
#include <iostream>
#include <math.h>
using namespace std;
int wynikSilni = 1;
int silnia(int liczba) {
if(liczba == 0 || liczba == 1) return wynikSilni;
return liczba * silnia(liczba-1);
}
int ile;
int main() {
cin >> ile;
int tab[ile];
int rozdzielona[2];
for (int i = 1; i <= ile; i++) {
cin >> tab[i];
string wynik = to_string(silnia(tab[i]));
int jednosci = wynik.length() - 1;
int dziesiatki = wynik.length() - 2;
if(wynik[dziesiatki] == NULL) {
wynik[1] = wynik[jednosci];
wynik[0] = '0';
dziesiatki++;
jednosci++;
}
cout << wynik[dziesiatki] << " " << wynik[jednosci] << endl;
}
}
Masz rację, liczby pierwsze i silnia biją rekordy dodałbym do tego jeszcze “Czy umiesz potęgować”.
Kilka lat temu przeczytałem na jakimś forum, że SPOJ jest beznadziejny, bo odrzucają dobre rozwiązania zadań. Podał przy tym przykład swojego “dobrego” rozwiązania. Zaciekawiło mnie to, wszedłem na SPOJ i tak to się dla mnie zaczęło…
Wg mnie największym problemem w kontekście (także tych) zadań jest profil osób wchodzących na SPOJa. Nie, żebym profilował nowych, ale wg mego wyobrażenia: 1) umiem zrobić Hello World 2) na kółku z infy zrobiłem kółko i krzyżyk, 3) ktoś mi powiedział, że SPOJ jest taki super i takie zadania dla programistów
No i zaczynamy serię rozczarowań, bo na owym kółku uczyli nas liczyć n! jak wyżej, a tu nagle zonk - matematyka. Do tego wystarczy byle kurs / bootcamp / … - i znowu niespodzienka - Adaś chciał zostać progamistą stron www, a tu klepanie kodu dla klienta pokrywa się ze SPOJem jak zagadki matematyczne i zadania szachowe z egzaminem z algebry, jeśli nie słabiej.
I w sumie rozumiem zawód, bo Ci ludzie zostali oszukani. SPOJ nigdy nie oferował zadań na klepanie ERPów, a z współczesnym IT ma mało wspólnego. Tu nie ma zewnętrznych libek, w C++ chyba nawet boosta nie ma, nie robimy animacji, nie ogarniamy systemu, nie klepiemy if(byłEnter) {wyświetlWiedźmina}. Są zadania raczej matematyczne, którymi ludzie rzadko się interesują, a których przydatność w realu też jest niska (kiedy ostatnio klepaliście KMP?).
Sorki, ale używanie mózgu przydaje się i w klepaniu kodu dla klienta i we współczesnym IT. Jak ktoś nie potrafi przeczytać wątku gdzie rozwiązanie podane na tacy, lub nie potrafi zrozumieć/znaleźć co to są liczby pierwsze i jak je się znajduje to raczej nie wróży to dobrze jego karierze programisty…
Czy nie jest tak, że to ludzie sami się oszukują oczekując czegoś innego niż oferuje im SPOJ. Spoj nie jest jakimś cudownym lekarstwem, panaceum, które za rączkę przeprowadzi każdego chętnego od wieku raczkowania do profesjonalnego programisty. Jeżeli ktoś stosuje zasadę 3 x Z, zakuj, zalicz, zapomnij, to spoj jest tylko małym ogniwem w tym łańcuchu - zaliczeniem, tego czego użytkownik nauczył się lub znalazł czy wyklikał i nie od spoja zależy co z tą wiedzą zrobi. Może to Ty @tarpauwatratar wprowadzasz w błąd i oszukujesz i siebie i oszukujesz innych wypisując swoje wymagania i niesprawdzone informacje. Nauka algorytmów to nie nauka korzystania z bibliotek. Nie ważne jak napiszesz [wyklepiesz] kod, jeżeli daje poprawne wyniki, to dostajesz AC. Nie musisz pisać obiektowo, czystym kodem, czy używać lub nie bibliotek - przecież je tu masz np dla C++, spróbowałeś chociaż to sprawdzić? Jeżeli nie to po co piszesz takie bzdury!?
PS
Jeżeli klepiesz to jesteś klepaczem, koderem, kopistą, copy-pasterem, a nie programistą
PS 2
Czy na twoim kółku informatycznym próbowaliście policzyć silnię z 1 000 000 000? I sprawdzić ile to zajmuje czasu? To zadanie możesz rozwiązać dokładnie tak jak uczyłeś się na kółku. Możesz napisać funkcję silnia, może być rekurencyjna lub iteracyjna, ale z małym, pojedynczym if’em. Jeżeli n jest większe od … to od razu podajesz wynik, jeżeli nie, a n jest “wystarczająco” małe to możesz obliczyć silnie tradycyjnie. Nie potrzeba tu stada if - else albo case swichów. ALe nie zależnie jak to zrobisz, jeżeli podasz poprawnie dwie ostatnie cyfry n!, to spoj zaliczy Ci zadanie.
Tak, masz rację @yula. Tylko pytanie, czy to jest aż taka prosta sytuacja.
Fakt, że wystarczy zerknąć na forum by wiele zrozumieć. Ale jeśli robisz np. zadania domowe na szybko, cóż… . Ludziom się nie chce. Wróćmy do silni. Jesteś w podstawówce, ogarniasz tabliczkę mnożenia. Czy przerasta Cię obliczenie silni? Nie. No to liczymy: 1!, 2!, … , 10!. Pytanie od nauczycielki: jaka będzie ostatnia cyfra 11!, 12!, … n!? Dzieci wszystko widzą i wiedzą!
A teraz robimy im “wodę z mózgu” przez lata edukacji, finalnie jasno wskazując, że w programowaniu chodzi o to, żeby zaklepać obliczanie n!. Jak to zrobić? Prosto: pierwsze zadanie w LO: oblicz resztę z dzielenia liczby x przez y. Czyli ludzie poznają magiczny znaczek %. Drugie zadanie: rozwiąż równanie liniowe. Trzecie: rozwiąż kwadratowe. A w domu połączcie to wszystko robiąc coś ciekawego… hm… co by tu wymyślić… wiem! Wiecie co to silnia? Już wam pokażę, to takie mnożenie. I rozwiążcie na następny tydzień zadanie na SPOJu i policzcie (hehe, też adekwatne słowo) ostatnią cyfrę n!. No i ludzie liczą. Co więcej, na infie dostają za takie programy dobre noty!
Nie wierzycie, że tak jest? Ok, rozumiem. Ja sam nie wiem jak jest Natomiast przypuszczam że tak, jak napisałem, bo… mój brat był na rozszerzonej infie i miał “kartkówkę” z cppa. Zadanie brzmiało: na wejściu nauczyciel wpisze jakieś dwie liczby, np. 123 oraz 7, a na wyjściu chce zobaczyć resztę z dzielenia pierwszej przez drugą. Nie, żeby ktoś wskazał zakresy danych wejściowych - ale z kontekstu wynikało, że mowa tylko o małych liczbach dodatnich.
Jak się to skończyło? Uwaga uwaga! To mocne! Przełożeniem kartkówki bo na poprzedniej lekcji nauczyciel zapomniał wspomnieć, że w C++ mamy operator % I tak, sam się zdziwiłem i sprawdziłem klepiąc kod - zadanie dało się rozwiązać pozostałymi operatorami, które omówione na lekcji były. Btw, jest chyba zadanie na SPOJu dotyczące dzielenia z resztą. No, ale po co myśleć. Skoro nie kazali… .
Zgoda.
Też zgoda. Im więcej na SPOJu tym bardziej dziwi mnie własna głupota. W życiu jeszcze gorzej
Mi mówić tego nie musisz. Ale mogę na priv dać Ci sporo namiarów na osoby, które chętnie się dowiedza, w czym różnica między SPOJem, programowaniem, algorytmami, matematyką, informatyką, pracą, szkołą, … A co do libek: nieliczne względem tych wykorzystywanych przez przeciętnego “klepacza”.
No tylko to właśnie trzeba ludziom powiedzieć. Wskazać, że to tzw. “zadanie z gwiazdką”. A nawet dwiema. A jak tego nie ma a nauczyciel / trener / guru / … kazało OBLICZYĆ, no to się nie dziwmy, że ludzie LICZĄ. Na lekcji rekurencja do liczenia silni była git. Już widzę, jak ktoś im tłumaczył, że tak się nie da w tym zadaniu bo cośtam.
Suggested Topics
Topic | Category | Replies | Views | Activity |
---|---|---|---|---|
MBPROB01 - History version in plaintext pl.spoj.com | Zbiór zadań | 6 | 152 | Jul '24 |
FR_20_02 - Poszukiwacze skarbów - Błąd w testach? | Zbiór zadań | 1 | 75 | Apr 2 |
PP0504B - StringMerge - w języku C | Zbiór zadań | 5 | 187 | Jun '24 |
TFRACAL - Kalkulator ułamków | Zbiór zadań | 2 | 125 | Feb 1 |
TOPSORTL - Porządek leksykograficzny w grafie | Zbiór zadań | 3 | 127 | Jul '24 |