30 / 30
Feb 2023

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.

No właśnie. Poprawność wyniku w dwóch przypadkach to chyba o wiele za mało by móc się zadeklarować, że wyniki wychodzą dobre…

Dobra już mam ten błąd. Aż się złapałem za głowę jak ogarnąłem jaki to był głupi błąd. Dziękuję za pomoc.

1 year later
1 year later

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

}

}

Korkirw Jesteś bardzo powściągliwy czy załamany? Ten chociaż dołączył do wątku, ale przeczytać go to już za trudna spawa

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ź.