2 / 30
Apr 2020

Cześć. Mam problem bo sędzia wywala mi ciągle ze błąd kompilacji. Nie wiem co w takim momencie mogę zrobić. Program jest prosty, jak go testuje w swoim kompilatorze to działa i kompiluje bez zarzutu. Wyniki są własciwe według wytycznych. Nie wiem w czym problem.

  • created

    Apr '20
  • last reply

    Feb '23
  • 29

    replies

  • 1.6k

    views

  • 9

    users

  • 6

    likes

  • 1

    link

zanim tu napisałem szukałem na forum, nie znalazłem niestety mojego problemu. Wiec nie rozumiem tego Dwie liczby silni? z trzema wykrzyknikami

Czytanie ze zrozumieniem? :wink: Dwie liczby silni to np 123 i 456.
np dla silni 123456

Jest drobna różnica między liczbą a cyfrą, czyż nie? A informatyka ma więcej z nauk ścisłych [matematyka] niż z nauk humanistycznych [poezja] :wink:

?? Przykro mi ale teraz nie rozumiem o co chodzi z tą odpowiedzią. Pytałem czemu taki “atak” z tym wpisem Dwie liczby silni?!!! a otrzuje odpowiedz o cyfrach i liczbach. Co ma do tego ta ospowiedz. Spodziewalem sie przeczytac np. “Napisałem tak bo ileż można pisać aby sprawdzić najpierw forum”. Na przykład cos takiego. Czemu nagle pisać o liczbach i cyfrach??? Doś obraźliwe jest potraktowanie kogoś jako debila który nie rozumie różnicy między cyframi a liczbami.

dwie cyfry silnii
Ale to nie przedmiot pytania jakie zadałem. Jjestem rozkojarzony bo banalne zadanie które rozwiązuje sposobem rekurencyjnym i iteracyjnym nie uzyskuje zalicznia i nie zwracam teraz uwagi na tytuł.

nIESTETY nawwet proste i banalne zadania wymagają odrobiny skupienia i zwracania uwagi nawet na drobiazgi. Jeżeli twoje pytanie to:

To przecież dostałeś dokładną odpowiedź, czyż nie? Może po prostu czytając jesteś zbyt rozkojarzoni i nie skupiasz się wystarczająco? Może więc wróć do początku i przeczytaj jeszcze raz?

@smroll “… i nie zwracam uwagi na tytuł”. To nie zwracasz uwagi na to na co w tym zadaniu najbardziej należy zwrócić uwagę :slight_smile: Zadanie jest proste. Uuups, przepraszam… Zadania jest BARDZO proste, należy tylko do niego podejść z należytym skupieniem. Sugeruję zastanowić się, dlaczego tak proste zadanie masz odrzucane. Co więcej, chociaż nie podajesz kodu to jestem przekonany, ze Twój przypadek gdzieś na forum jest opisany, ale prawdę mówiąc, lepiej zrobisz, gdy, jak pisze @narbej, wrócisz do treści zadania i przeczytasz go jeszcze raz, dwa razy, … n-razy, tyle ile będzie trzeba. To co piszę to nie są żadne złośliwości, to jest uczciwa, dobra rada. Docenisz to, gdy znajdziesz odpowiedź.
Dodam jeszcze jedną rzecz. Jak wspomniałem nie znam kodu, ale najprawdopodobniej nie rozwiązujesz wskazanego zadania tylko swoje wyobrażenie tego zadania. Więc głównym problemem jest to byś zaczął rozwiązywać TO zadanie a nie WŁASNE

Prawda, prawda. Zadanie oczekuje czegoś innego niż zakładałem ja. Mój błąd. Mój kod iteracyjny wygląda tak: napewno prędzej czy później znajde rozwiązanie.

#include

using namespace std;
int a, ile;

int main()
{

cin>>ile;
for(int i=1; i<=ile;i++)
    {
        cin>>a;
        if(a>=10)
        {
        cout<<0<<" "<<0<<endl;
        }else
        {
            for(int j=a;j>=2;j--)
                {
                a=a*(j-1);
                }
            cout<<a/10%10<<" "<<a%10<<endl;
        }
    }

return 0;

}

Jeszcze nie działa ale może kiedyś zrozumiem treść zadania.

A jednak myliłem się! Zrobiłeś inny błąd niż przypuszczałem :slight_smile:
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… :rofl: 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…

Rozumiem, że już nie masz problemu z kompilacją?

Teraz problem z WA [wrong answer]?
Więc teraz wystarczy tylko przetestować, to w końcu mniej niż 12 testów, chyba to nie jest dużo?

O matko, Zapomniałem o zerze i jedynce. Za to kocham programowanie. Musiałem sobie zrobić przerwe na VR i po powrocie do problemu od razu wpadło. Dzięki za wyrozumiałość i pomoc.

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;
}

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:

  1. Nie musisz sprawdzać czy ilość pomiarów lub badana mieści się w zakresie. To jest zapewnione. To od razu uprości kod.
  2. 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.
  3. 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;

}

  1. 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
  2. To, że kod się kompiluje, jeszcze nie oznacza, że jest poprawny. Może mieć błąd wykonania, może przekraczać czas.
  3. 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.