Zadanie SPOJ - sortowanie. Błędna odpowiedź.

2014-01-19 13:24

Rejestracja: 6 lat temu

Ostatnio: 2 lata temu

0

Witam,

Link do zdania. http://www.spoj.com/WSDOCPP/problems/SORTWNIA/

Program

#include<stdio.h>
#include<stdlib.h>  

void Sortuj_szybko(int d[],int lewy, int prawy)
{
  int i,j,piwot,temp;

  i = (lewy + prawy) / 2;
  piwot = d[i]; d[i] = d[prawy];
  for(j = i = lewy; i < prawy; i++)
  if(d[i] < piwot)
  {
    temp=d[i];
    d[i]=d[j];
    d[j]=temp;
    j++;
  }
  d[prawy] = d[j]; d[j] = piwot;
  if(lewy < j - 1)  Sortuj_szybko(d,lewy, j - 1);
  if(j + 1 < prawy) Sortuj_szybko(d,j + 1, prawy);
}

int main()
{
    static int tab[100000];
    int cnt=0,i,val;
    for (i=0;i<100000; i++)
    {
        scanf("%d",&val);
        tab[cnt++]=val;
        if (val=getchar()=='\n')break;
    }
    Sortuj_szybko(tab,0,cnt-1);
    for (i=cnt-1; i>=0; i--)
        printf("%d ",tab[i]);

    return 0;
}

Sprawdziłem program poprzez wylosowanie 105 liczb z zakresu od 0 do 109 i zapisałem wynik do pliku, wszystko wydaję się ok, mimo to SPOJ zwraca błędną odpowiedź.

PS - na przyszłość w takich zadaniach używaj qsorta. - hauleth 2014-01-19 14:32

Pozostało 580 znaków

2014-01-19 14:07

Rejestracja: 14 lat temu

Ostatnio: 2 dni temu

int main()
  {
   static int tab[100000];
   int i,cnt=0;
   while(scanf("%d",tab+(cnt++))==1) {}
   Sortuj_szybko(tab,0,cnt-1);
   for(i=0;i<cnt;++i) printf("%d ",tab[i]);
   return 0;
  }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Program zapętla się w nieskończoność:) - la1k 2014-01-19 14:36
Faktycznie masz racje. Źle zrozumiałem zadanie, myślałem że program ma zakończyć wprowadzanie liczb i wypisać wynik po przejściu do nowej linii, dlatego napisałem że się zapętla w konsoli. Dzięki wielkie - la1k 2014-01-19 16:27
Jeszcze jedno, możesz wytłumaczyć mi ten fragment (scanf("%d",tab+(cnt++))==1) ? - la1k 2014-01-19 16:36
sprawdzenie czy funkcja zwróciła wartość 1, patrz opis funkcji scanf - _13th_Dragon 2014-01-19 16:40

Pozostało 580 znaków

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0