241 / 277
Jan 2021

Hej, ciekawi mnie czemu zamiast zwykłego print(“TAK”) albo print(“NIE”) w if i != 1: ; else: dodajesz do listy i potem pętlą drukujesz listę?

Pytam bo dopiero uczę się Pythona i zwyczajnie nie rozumiem czy np. są z tego jakieś korzyści.

Program zrobi to samo ale nie wyświetli tego w wymagany sposób. Wyjdzie Ci np:
3
TAK
4
NIE
5
TAK

Tak jest tylko jeśli testujesz z konsoli, wtedy miesza się Twój input z outputem. Jak przekierujesz sobie stdout do pliku i uruchomisz program, zobaczysz wtedy w tym pliku to, co widzi spoj. Nie będzie tam tych liczb.

Dodatkowo, dla spoja jest bez znaczenia czy wypisujesz po kolei czy wszystko na raz, ale lepiej po kolei (zrobisz jeden test i od razu wypisz wynik), gdyż kod jest czytelniejszy.

Lub tylko przekierujesz stdin z pliku
lub przekierujesz i stdin i stdout z i do odpowiednich plików
lub użyjesz ideone z wypełnionym testem [danymi] okienkiem stdin
lub użyjesz innego rozwiązania, które robi to co powyżej
lub napiszesz sobie sam taki odpowiedni program robiący np to co ideone lub więcej

Dokładnie tak. Spoj “przekierowuje” “sobie” stdin z jednego i stdout do drugiego pliku, a nie wypisuje nic na konsoli więc “mu” się nie nie miesza.

3 months later

Witam

Będę bardzo wdzięczny za pomoc w oczywistej tutaj kwestii, tj. źle działającego kodu:

Dlaczego np. 9 wskazuje jako liczbę pierwszą? Czy coś namieszałem w pętli?

Twoja pętla sprawdzająca pierwszość zawsze się przerwie po pierwszej iteracji. Prześledź sobie uważnie działanie programu (np. z pomocą debuggera), sprawdzając zwłaszcza wyniki instrukcji warunkowych.

Zrobiłem coś takiego:

Jednak sędzia pokazuje przekroczony limit czasu.

1 month later

Witam, będę wdzięczny za pomoc w znalezieniu błedu

#include
using namespace std;

int main()
{
int n,x,test;
cin >> n;
{
for (int i=0; i<n; i++)
{
cin >> x;
if(x<2) test=0;
if (x==2) test=1;

    for(int k=2; k*k<=x; k++){
        if(x%k==0) test=0;
        else test=1;}
        
        if (test==1) cout <<"TAK"<< endl;
        else if (test==0) cout << "NIE"<<endl;
    }
}

}

Dzień dobry, nie bardzo chyba jeszcze rozumiem mechanizm działania tej strony więc proszę o pomoc w znalezieniu błędu. Z góry dziękuję

#include
using namespace std;

int number;

int main()
{
cin >> number;

if (number == 1) return 0;
else
{
	for (int i = 2; i < number; i++)
	{
		if (number % i == 0)
		{
			cout << "NO";
			return 0;
		}
	}

	cout << "YES";
}

return 0;

}

Przeczytaj dokładnie opis zadania.

  1. Sprawdź czy Twój kod jest przygotowany na to co może pojawić się na wejściu. W przykładzie podane jest sprawdzenie trzech liczb.
    Czy Twój program sobie z tym poradzi? - Nie Twój program przyjmuje tylko jedną liczbę.

  2. Czy Twój program podaje wyjście zgodne ze specyfikacją podaną przez autora zadania? - Nie Twój program podaje wynik inny niż oczekuje tego autor zadania

Weź pod uwagę fakt, że poprawność rozwiązania sprawdza automat. On podchodzi do problemu zero-jedynkowo. Albo całość jest poprawna i wtedy masz zaliczenie, albo tak nie jest i wtedy nie masz zaliczenia. Nie masz tu częściowo dobrze zrobionego zadania tak jak nie można być trochę w ciąży :grinning: No, dobrze są takie zadania gdzie częściowe wyniki też się liczą, ale to do takich nie należy.
Inną jeszcze kwestią jest wybór nieefektywnego algorytmu.

8 days later

Test:

1
1

Wyjście:

NIE

Zwróć uwagę na wielkość liter i warunki brzegowe zadania (n - liczba testów n<100000, w kolejnych liniach n liczb z przedziału [1…10000]).

Dzień dobry, to moje pierwsze początki w programowaniu w Javie jak i na tym portalu. Po wrzuceniu rozwiązania system wyrzuca mi błąd wykonania (NZEC). Mógłby mi ktoś podpowiedzieć co robię nie tak?

import java.util.*;

public class PrimeNumbers
{

 public static void main(String[] args) throws java.lang.Exception
 {

	Scanner in = new Scanner(System.in);

	short Liczba;
	byte Dzielniki;
	
	for(int i = 1; i <= 10000; i++)
	{
		Dzielniki = 0;
		Liczba = in.nextShort();
		if(Liczba == 1) continue;
		
		for(int j = 2; j <= Liczba; j++)
		{
			if(Liczba % j == 0)
			{
				Dzielniki++;
			}
		}
		
		if(Dzielniki == 1)
		{
			System.out.println("TAK");	
		}
		else
		{
			System.out.println("NIE");
		}
	}
  }	
}
3 months later

Dopiero co się uczę programowanie i mam pytanie czemu wywala mi błąd związany chyba z pamiecią (i tak wiem pewnie dałoby się go znacznie uprościć ale jak wspomniałem dopiero się uczę :smile:

#include <iostream>

using namespace std;

int main()
{
	int liczba_testow;
	cin >> liczba_testow;

	int* liczby = new int[liczba_testow];
	bool isPrime;

	for (int k = 0; k < liczba_testow; k++)
	{
		cin >> *liczby;
		liczby++;
	}

	for (int l = 0; l < liczba_testow; l++)
	{
		liczby--;
	}


	for (int i = 0; i < liczba_testow; i++)
	{
		if (*liczby == 0 || *liczby == 1)
		{
			cout << "NIE" << endl;
		}
		else
		{
			isPrime = true;
			for (int j = 2; j < *liczby; j++)
			{
				if (*liczby % j == 0)
				{
					isPrime = false;
				}
			}
			if (isPrime) cout << "TAK" << endl;
			else cout << "NIE" << endl;
		}
		liczby++;
	}

	delete[] liczby;

	return 0;
}