1 / 31
Nov 2015

Po raz kolejny... prawidłowe wyniki, a sędzia twierdzi, że nieprawidłowe rozwiązanie. W czym może być problem?
http://pl.spoj.com/problems/NIEKOLEJ/46

Kod:

    #include<stdio.h>

int main() {

    int n;
    int mid;

    scanf("%d", &n);

    if(n <= 3) {
        printf("NIE");
    } else {

        mid = n / 2;

        if(n%2) {

            for(int i = 0; i <= mid; i++) {
                printf("%d %d", i, mid + 1 + i);
                if(i != mid) {
                    printf(" ");
                }
            }

        } else {
            for(int i = 0; i < mid; i++) {
                printf("%d %d", i, mid + 1 + i);
                if(i != mid - 1) {
                    printf(" ");
                }
            }

            printf(" %d", mid);
        }

    }

    return 0;
}

Przykład wywołania:

11
0 6 1 7 2 8 3 9 4 10 5 11
  • created

    Nov '15
  • last reply

    Oct '23
  • 30

    replies

  • 3.8k

    views

  • 15

    users

  • 2

    likes

  • 11

    links

Dla zera ma dać 0.
Dla 3 -> 0 2 1 3 np.

U ciebie oba są na NIE

Pzdr.

Przecież dla 3 -> 0 2 1 3:
2 i 1 stoją obok siebie

Cytat z zadania:
"przy czym żadne dwie sąsiednie liczby nie mogą różnić się o 1"

Dodałem warunek dla zera, ale niestety dalej oznacza jako błędne

Dzięki. Jeszcze warunek dla samej trójki wystarczył i zaakceptowało

10 months later

Faktycznie, teraz nie widzę złych wyników. Może chodzi o spację na samym końcu wyswietlania wyników.
Mój program tej spacji na koncu nie wyswietla i przeszedł

Teraz to zauważyłem. Problem jest w tym, że jak wpisuje maksymalną liczbę jaka jest w zadania czyli 10^6 to program się wysypuje i nie wiem co na to poradzić. Wiesz może jak to rozwiązać ? :slight_smile:

1) przeczytaj uważnie cały wątek
2) int x[n] oznacza że istnieją elementy od 0 do n-1; x[n] nie istnieje

1 month later
2 months later

Czy jest ktoś w stanie znaleźć błąd w tym programie?
Sędzia sygnalizuje błędną odpowiedź. Wydaje mi się, że wszystko działa poprawnie:

(kod usunięty)

Przypadki graniczne? Co masz na myśli? Program działa poprawnie dla n=0 i n=10^6.

Przeczytaj cały wątek. Możesz skupić się na odpowiedziach, a pomijać posty pytających.

PS
Jak widzę w kodzie taki kawałek:

    if(n<0 || n>1000000)
        exit(0);

to od razu scyzoryk otwiera mi się w kieszeni, że tak powiem [bo akurat mam puste kieszenie].

Ok, rzeczywiście dla 0 powinno wyświetlić się 0. Dzięki, kod usunięty.

PS
Dlaczego jak widzisz w kodzie taki kawałek:

if(n<0 || n>1000000)
exit(0);

to od razu scyzoryk otwiera Ci się w kieszeni?

Rozumiem, że w zadaniu jest określony przedział, więc taki warunek nie jest tu potrzebny, ale dlaczego uważasz to za błąd?

Super, rozumiem. Dzięki za wyczerpującą odpowiedź, bo ciężko nie przyznać Ci racji.