U Ciebie char *sig powinien nazywać się poprostu temp, tmp lub pom.
Na koniec wypisujesz odwrócony ciąg ale w pamięci jest prawidłowy, więc nawet nie trzeba go odwracać, jak napisałem wcześniej.
PS
Jeżeli funkcją malloc alokujemy pamięć na string, to musimy zaalokować jej co najmniej o 1 więcej, niż długość stringa, bo przecież na końcu stringa jest jeszcze jeden znak, znak = 0. Dodatkowo, ponieważ malloc tylko przydziela obszar pamięci, ale go nie zeruje, musimy to zero wpisać ręcznie na końcu stringa. W takim razie, tylko poprawka malloc(k+1], tab[k] = 0 ... free będzie działać tak jak chciałeś. A dlaczego, w takim razie nie ma SIGABORT SIGKILL czy jakiegoś podobnego sygnału? Nie wiem, ale "normalnie" takie zdarzenia najczęściej nie są w ogóle sygnalizowane [aby program nie tracił czasu indeksy nie są sprawdzane] i dopiero doinstalowanie odpowiednij biblioteki może wymusić takie zachowanie.
PS2
Ps: Czy małe serduszko ma jakiś wpływ na statystyki ;> czy tylko na nasze samopoczucie? ^^
Hym. Nic nie wiem o statystykach, ale dobre uczynki zostaną nam policzone i nagrodzone? Ma to jednak dodatkowo wpływ na komunikatywność. Ty nie musisz pisać, dzięki, pomogło, tylko klikasz w serduszko, a ja wim, że byłem w jakimś stopniu pomocny i że w ogóle przeczytałeś moją podpowiedż i Cię usatysfakcjonowała, a jeżeli za mało, to pytasz dalej.
PS 3
Możesz trochę skrócić kod, np:
zamiast:
char temp;
temp = *x;
możesz
char temp = *x;
swap((a+l), (a+i)) <==> swap (a+l, a+i)
*(a+(i+1)) <==> *(a+i+1)
*(a+(r-1)) <==> *(a+r-1)
zamiast:
for(int i=0; i<k;i++)
{
tab[i]= 97+i;
}
możesz
for(int i=0; i<k;i++)
tab[i]= 97+i; // a lepiej tab[i] = 'a' + i;
A jeżeli już to ja pewnie napisałbym to jakoś tak:
for (int i = 0; i < k; ++i) { //<-- nawias w tej linii
tab [i] = 'a' + i; // tu może trochę zaszalałem [ze spacjami] ;-)
/// inne operacje
}
Chyba, że wolisz, żeby za ciebie robiło to twoje ukochane ide, ale jak kocha[ne] to powinno się dać ustawić i dostosować do Ciebie a nie Ty do niego[ej], lub trzeba zmienić na inną[go]
Podbijam, niech ktoś chociaż przepróbuje to u siebie. Nie miałem nigdy do czynienia z takimi problemami podczas pisania, więc tym bardziej nie wiem co mam poprawić.
EDIT:
Poprawiłem wyjście tak, aby nie wypisywać znaku nowej linii po ostatnim teście, ale to wcale nie pomogło. Czekam na jakąkolwiek odpowiedź...
//tu był jakiś tam kod
EDIT2:
if (n<=0)
continue;
Nie wydawało mi się że w testach może być wypisanie 0-permutacji. A jednak.
Kody usuwam.
nie bardzo wiem, co odpowiedzieć - bo kod ma się nijak do treści zadania - nawet zamieszczony przez ciebie przykład jest zupełnie inny niż w treści zadania (nie tylko wartości ale i struktura danych) - więc albo to inne zadanie (dopisałeś się do innego wątku ?), albo niedokładnie przeczytałeś/zrozumiałeś zadanie
Chodziło mi o to zadanie: MWP2_3C - Permutacje19.
Hej. Mój kod przekracza limity czasowe. Wcale się nie dziwię ale nie mam pomysłu na inne rozwiązanie zadania. W skrócie każde słowo sortuje i daje do tablicy dynamicznej. Następnie przechodzę po każdym słowie i sprawdzam czy wystąpiło w tablicy . Jeśli ilość wystąpień jest większa od maksa to zmieniam maksa. Na końcu wypisuje maxa. Mam teraz prośbę o sprawdzenie mojego kodu , wytknięcie mi błędów jakie robię i naprowadzenie na rozwiązanie zadania.
Kod : https://ideone.com/tkeNGN#stdin38
Liniowe wyszukiwanie istniejących słów jest zdecydowanie za wolne. Z tego co widzę, masz algorytm o złożoności kwadratowej, co jest jeszcze gorsze, niż myślałem. Proponuję od razu zliczać ilość wystąpień danego słowa, już podczas ich wczytywania.
Dodatkowo poczytaj sobie o kontenerach map13 i unordered map17.