A jednak myliłem się! Zrobiłeś inny błąd niż przypuszczałem
Ale tak jest ze zgadywaniem błędu, gdy nie widać kodu.
Błąd jest bardzo prosty, ale nie chcę Ci na razie dawać podpowiedzi. Powtórzę tylko, że jest bardzo prosty… Samodzielne znalezienie takiego błędu też jest dobrą nauką
Przejrzałem pewne wątki dotyczące tego zadania i znalazłem kogoś z identycznym problemem…
Mam problem z tym zadaniem. Wyniki wychodzą mi dobre, ale sędzia wywala cały czas błąd. Wie ktoś dlaczego?
#include
using namespace std;
int proba,liczba,wynik=1,a=0;
int main()
{
cin>>proba;
if(proba>=1&&proba<=30)
{
for(int i=1;i<=proba;i++)
{
cin>>liczba;
if(liczba>=0&&liczba<=1000000000)
{
for(int j=1;j<=liczba;j++)
{
wynik=wynik*j;
}
}
else
{
return 0;
}
if(wynik<10)
{
cout<<a<<" "<<wynik<<endl;
}
else
{
cout<<(wynik/10)%10<<" "<<wynik%10<<endl;
}
}
}
else
{
return 0;
}
return 0;
}
-
Jeśli zaczynasz, przeczytaj koniecznie! <--kliknij w to proszę!
-
bez wciec trudno jest analizowac.
-
Test wklepac trzeba jako calosc(jakas zmienna powinna byc zerowana dla kazdej nowej liczby)
wejscie:
2
2
3
wyjscie
0 2
0 6 -
takie obliczenie nie jest optymalne moze wystapic TLE chociaz nie testowalem tego.
Mógłbym prosić Was o pomoc z poniższym programem. Próbowałem różnych testów i poległem.
#include<iostream>
using namespace std;
int main()
{
unsigned int ile_razy, pom, silnia=1;
cin >> ile_razy;
if (ile_razy > 0 && ile_razy <= 30)
{
for(int j = 0; j < ile_razy; j++)
{
cin >> pom;
if (pom == 0 || pom == 1)
{
silnia = 1;
}
if (pom > 1 && pom <= 1000000000)
{
while (pom != 1)
{
silnia *= pom--;
}
}
else (pom > 1000000000);
{
break;
}
cout << silnia / 10 << " " << silnia % 10 << endl;
}
}
return 0;
}
Ale konkretnie jakiej pomocy oczekujesz?
Zwracam Ci uwagę, że:
- Nie musisz sprawdzać czy ilość pomiarów lub badana mieści się w zakresie. To jest zapewnione. To od razu uprości kod.
- Twój kod nie podaje wyniku dla żadnej liczby. Sorry, ale jeśli nie potrafisz napisać programu, który nie jest w stanie podać rozwiązania nawet dla danych testowych, w tak banalnym przypadku, to po prostu zacznij od najprostszych zadań. Ja ci nie wskażę, gdzie jest błąd. Jest beznadziejnie prosty. Zresztą, gdy uwzględnisz to co napisałem na początku to problem zniknie.
- Oczywiście nie zniknie problem z brakiem zaliczenia na SPOJ, ale to co powinno zostać naprawione jest opisane już chyba kilkadziesiąt przynajmniej razy. Zmuś się do odrobiny wysiłku i poczytaj na wątkach dotyczących tego tematu.
Na co mam zwrócić uwagę jeżeli program kompiluje u siebie na komputerze i działa. A na spoju: przekroczyłem czas.
Zmieniłem program po twoich sugestiach i działa. Ale nadal nie wiem gdzie był błąd. W pierwszej wersji programu który nie pokazywał żadnego wyniku. Jeżeli dodałem instrukcję cout do każdego instrukcji, warunku (if, for itp) aby przetestować poprawność kodu - działał bez zarzutu. Po skasowaniu instrukcji cout, nie działał…?
Przeglądając forum i czytając różne posty. Trzeba czytać dokładnie zadania. Dlatego umieściłem warunki co do zakresu liczb. Ale rozumiem, po Twojej odpowiedzi że nie trzeba się tym zajmować?
Na co mam zwrócić uwagę w kolejnych zadaniach jeżeli u mnie kod będzie się kompilował i działał a na spoju będę miał przekroczony czas?
Poniżej przesyłam kod działający.
#include<iostream>
using namespace std;
int main()
{
unsigned int ile_razy, pom, silnia=1;
cin >> ile_razy;
for(int j = 0; j < ile_razy; j++)
{
cin >> pom;
if (pom == 0 || pom == 1)
{
silnia = 1;
}
else
{
while (pom != 1)
{
silnia *= pom--;
}
}
cout << silnia / 10 << " " << silnia % 10 << endl;
silnia = 1;
}
return 0;
}
- Co do błędu, który miałeś wcześniej i nie były wypisywane wyniki…
Przejrzyj swój kod linijka po linijce, bardzo dokładnie, powinieneś go znaleźć. Podkreślam DOKŁADNIE - To, że kod się kompiluje, jeszcze nie oznacza, że jest poprawny. Może mieć błąd wykonania, może przekraczać czas.
- Ty w zadaniu masz teraz dwa problemy.
a. błędna odpowiedź
b. przekroczenie czasu.
Co do podpunktu a) to nawet w tym wątku @narbej pisze by poczytać o różnicy między cyfrą a liczbą. Rozumiesz tę różnicę? Poczytaj sobie.
Co do podpunktu b) to napisałem we wcześniejszym poście w punkcie 3.
Hej , mam problme poniewzz program nie miesci sie w czasie czy ktos mogłby skorygoac mój problem?
#include
using namespace std;
unsigned int D,liczba,k,w;
main()
{
cin>>D;
for(int i=0; i<D; i++)
{
cin>>liczba;
if(liczba<=1)
cout<<"0 1"<<endl;
else if(liczba>2)
{
w=1;
for(int p=2; p<=liczba; p++)
w=w*p;
k=w%10;
w=w-k;
w=w/10;
cout<<k<<" ";
k=w%10;
w=w-k;
w=w/10;
cout<<k<<" ";
cout<<endl;
}
}
}
Nie wiem czy śmiać się czy płakać…
A tak merytorycznie…
@uczesieinfy - Twój problem to jest coś co dotyczyło baaaaardzo wieeeeeeelu rozwiązujących to zadanie i problem był poruszany na forum wiele razy. Naprawdę znajdziesz tam podpowiedź i odpowiedź.
Suggested Topics
Topic | Category | Replies | Views | Activity |
---|---|---|---|---|
MBPROB01 - History version in plaintext pl.spoj.com | Zbiór zadań | 6 | 176 | Jul '24 |
FR_20_02 - Poszukiwacze skarbów - Błąd w testach? | Zbiór zadań | 1 | 96 | Apr 2 |
PP0504B - StringMerge - w języku C | Zbiór zadań | 5 | 205 | Jun '24 |
TFRACAL - Kalkulator ułamków | Zbiór zadań | 2 | 144 | Feb 1 |
TOPSORTL - Porządek leksykograficzny w grafie | Zbiór zadań | 3 | 148 | Jul '24 |