nie rozumiesz treści zadania i nie rozumiesz, co piszę
czy naprawdę dla danych testowych z zadania masz taki wynik, jak podano ?
a generalnie, to należy testować w środowisku podobnym do tego, w jakim działa spoj - czyli na ideone.com, a jeżeli już na vs, to z przekierowanym wejściem/wyjściem
@general_iceman przeczytaj jeszcze raz treść zadania:
Input
n - liczba testów n<100000, w kolejnych liniach n liczb z przedziału [1…10000]
Teraz przyjrzyj się przykładowemu wejściu i SPRAWDŹ swoje wyniki
Input:
3
11
1
4
Output:
TAK
NIE
NIE
Poza tym w funkcji Pierwsza(x) powinieneś rozpatrywać przypadek 0 i 1. W funkcji Main będziesz mógłbyś uprościć kod do takiej konstrukcji:
if (Pierwsza(x)) {...}
else {...}
Witam, jestem nowym użytkownikiem i świeżym “programistą”. Uczę się Javy od kliku dni Mam problem z tym zadaniem. W domu wszystko hula jak należy, ale na serwerze wyrzuca błąd NZEC. Czy ktoś wie gdzie mam błąd? Mój kod wygląda tak:
import java.util.;
import java.lang.;
class Main
{
public static void main (String[] args) throws java.lang.Exception
{
Scanner scanner = new Scanner(System.in);
for(int i = 0; i < 100000; i++){
System.out.println("Podaj liczbę:");
int liczba = scanner.nextInt();
int k = 0;
for(int j = 1; j < liczba; j++)
if(liczba%j == 0)
k++;
if(k>1)
System.out.println("NIE");
else
System.out.println("TAK");
}
}
}
Moje wskazówki:
- Niepotrzebnie wypisujesz "Podaj liczbę: ". Kod sprawdzany jest automatycznie i musisz dostosować się do
formatu we/wy opisanego w zadaniu, bo inaczej dostaniesz WA. - Nie wczytujesz liczby określającej liczbę przypadków testowych - musisz ją wczytać a potem uruchomić pętlę dla
testów. Ty wykonujesz tę pętlę zawsze 100000 razy. - Wystarczy sprawdzać dzielniki od 2 do pierwiastka z n. (int j = 2; j*j <= n; j++). Gdy tylko znajdziesz dzielnik możesz
opuścić tę pętlę, bo liczba będzie złożona. - Musisz rozważyć sytuację gdy liczba to 0 lub 1 - bo to nie są liczby pierwsze.
Powyższe wskazówki pozwolą Ci na uzyskanie AC. A oto bardziej ogólne porady:
- Najoptymalniejszym sposobem na to zadanie jest sito Erastotenesa - jak już pouczysz się trochę to proponuję
powrócić do tego zadania i zaliczyć je tym algorytmem. - Swój kod przekazuj w formie linku do ideone.com1. Możesz tam wklejać input i testować swój kod.
Staraj się też poprawić czytelność kodu. - Java ma bardzo wolne I/O. Są dużo lepsze sposoby organizacji I/O - poszukaj na przyszłość.
- To zadanie wcale nie jest najłatwiejsze z kategorii łatwych. Poniżej masz linki do kilku bardzo prostych, żebyś mógł
się oswoić:
https://pl.spoj.com/problems/PTEST/6
https://pl.spoj.com/problems/POTSAM/4
https://pl.spoj.com/problems/MWPZ06X/3
https://pl.spoj.com/problems/VSR/4
Witam Czy jest jakaś dobra dusza która programuje w Jave i wyjaśni mi co w moim kodzie nie działa ? Programuje od kilku dni i brakuje mi doświadczenia dlatego zgłaszam się do mądrzejszych
import java.util.Scanner;
public class LIczbyPierwsze {
public static void main(String[] args) {
int b = 1;
int c = 0;
Scanner lPierwsza = new Scanner(System.in) ;
int a = lPierwsza.nextInt();
int g = a+1;
for ( int i =1;i<g;i++)
{
if (a%i==0){
c = b++ ;
}
}
if (c==2){
System.out.println("TAK");
}else{
System.out.println("NIE");
}
}
}
popatrz na moją odpowiedź na twoje pytanie w wątku: ETI06F1 - Pole pewnego koła
RESULT: “Błędna odpowiedź”. Proszę o pomoc z jakiego powodu dostaję błąd. Kod sprawdza liczby pierwsze prawidłowo.
#include
#include <math.h>
using namespace std;
int t, i;
int a, m, w;
string odp;
int main()
{
cin>>t;
while((t<=0) || (t>100000))
{
cin>>t;
}
for(i=0; i<t; i++)
{
cin>>a;
while((a<=0) || (a>=10000))
{
cin>>a;
}
odp="TAK";
for(m=2; m<=sqrt(a); m++)
{
w=a%m;
if(w==0) odp="NIE";
}
if(a==1) odp="NIE";
cout<<odp<<endl;
}
cout<<endl;
return 0;
}
Pomyliłeś się w sprawdzeniu, które nie było wcale potrzebne:
while((a<=0) || (a>10000))
Poza tym tam można by użyć pętli do … while żeby uniknąć redundancji kodu.
Mam kilka uwag. Sprawdzanie czy liczba jest pierwsza możesz wydzielić do osobnej funkcji. Nie używaj zmiennych globalnych. Używanie jednoliterowych nazw jest złym pomysłem - utrudnia czytanie i korzystanie z kodu. Zamiast <math.h> dołączaj < cmath > (raczej nie używamy zdeprecjonowanych/przestarzałych nagłówków z C). Poczytaj o typie bool.
Przykład:
#include <iostream>
#include <cmath>
bool is_prime(int number)
{
if (number < 2) {
return false;
}
// ...
}
int main()
{
int tests;
std::cin >> tests;
for (int i = 0; i < tests; i++)
{
int number;
std::cin >> number;
std::cout << (is_prime(number) ? "TAK" : "NIE") << "\n";
}
}
Witam! Czy jest ktoś kto umiałby mi wytłumaczyć dlaczego sędzia tego nie zalicza chociaż w kompilatorze wynik jest poprawny. Z góry dziękuje za odpowiedź.
#include
#include
using namespace std;
int liczba, dzielniki;
int main()
{
cin>>liczba;
if(liczba>=2)
{
for(int i=1;i<=liczba;i++)
if((liczba%i)==0)
{
dzielniki++;
}
}
else
cout<<“NIE”;
if(dzielniki>2)
{
cout<<“NIE”;
}
else cout<<“TAK”;
return 0;
}
sędzia zadania nie zalicza, ponieważ wyniki twojego programu są inne, niż oczekuje (czy inaczej mówiąc: złe)
wskazane jest przekazywanie kodu poprzez ideone.com2 - nie ginie wtedy formatowanie kodu ani jego fragmenty
na ideone.com2 należy też testować program, co najmniej dla danych przykładowych podanych w zadania - zobaczyłbyś wtedy, że wyniki z twojego programu są niewłaściwe