30 / 52
Aug 2017

Wskazówki!

  1. To nie pierwszy twój post na forum z pytaniem czy podpowiedzią więc powinieneś już chyba wiedzieć jak wklejać kod?
  2. Podpowiadając, warto samemu sprawdzić, bo możemy niechcący napisać głupotę.
  3. Tu tablicy używasz do wczytania więc nie trzeba jej wcześniej zerować.
  4. konstrukcja tab[101] = {0} jest [to moje przypuszczenie] równoważna np pętli:
    while(i--) tab[i] = 0;

AD 2
spacje na cout robimy poprzez:
cout << ' ' ; lub cout << " ";

AD 4
Więc albo zrezygnuj z zerowania [={0}], albo deklaruj poza pętlą.

PS
Zrobiłbym trochę inaczej. :wink: Zrezygnował z kopiowania, a zostawił tylko wstawianie zera. Dodatkowa zmienna na pamiętanie ostatniego-poprzedniego zwierzaka.

Ad 1.
Nie rozumiem o co chodzi, przecież kod jest ładnie wklejony za pomocą ctrl+shift+c
Ad 4.
konstrukcja tab[101]={0} nie jest wcale równoważne pętli, gdyż np. zapis
tab[101] = {4} ustawi pierwszy element tablicy na wartość 4 natomiast pozostałe elementy przyjmą wartość 0.
Dlatego tylko i wyłącznie do zerowania tablicy używam zapisu = {0}.
(Możesz to łatwo sprawdzić)

#include <iostream>
int main()
{
    std::cout << "Mozna go wkleic ladniej, albo jeszcze troszkę ładniej ;-)\n";
    return 0;
}

To była próba podpowiedzi, a nie prośba o [wy]tłumaczenie. Zdaje mi się, że to ty masz z tym zadaniem problem, a nie ja, ale może mi się tylko tak wydaje.
Napisałem coś o konstrukcji tab[] = {0}, a nie o tab[] = {4}, bo wiem dokładnie jak to działa, a także jak działa tab[101] = {0, 1, 2, 3, 5, 7, 11}, czy tab[101] = {} itd itd.

Czytałeś moją podpowiedź nieuważnie, albo ze złym nastawieniem [bo nadal nie masz AC] więc może jeszcze raz wróć do niej?

PS

Cóż, nie mam takich możliwości, aby sprawdzać za każdym razem, czego tylko używasz, ale nawet gdybym miał, nie miałbym ani ochoty ani czasu tego robić :wink:

Właściwie to bez znaczenia. Kod można wkleić na Ideone i wstawić tu link, co upraszcza wiele rzeczy.

Btw - uważałem i dalej uważam, że wklejanie kodu na nowym forum jest paskudne pod względem estetycznym i bardzo nieintuicyjne. Z tego też powodu wręcz zalecam Ideone.

Jak ktoś będzie chciał powiedzieć jak się wkleja kod [chodzi o skrót klawiszowy] to niech da znać :slight_smile:

Przy pisaniu odpowiedzi masz taki placeholder "Use Markdown". Nim można takie i inne rzeczy wyprawiać. To nie skrót klawiszowy (przynajmniej nie znam skrótu to upiększenie generującego).

wyprowadzanie w pętli po jednym znaku jest zdecydowanie wolniejsze niż wyprowadzenie jednym poleceniem

printf("%s", ...);

oczywiście musisz doprowadzić swoje dane do takiej postaci, aby było to możliwe :slight_smile:

https://ideone.com/1hrnBZ40 + jedna, mała, kosmetyczna poprawka == AC http://pl.spoj.com/status/AL_01_02,narbej/23 ID = 20050280 [ale też kilka wcześniejszych moich AC na tej liście z poprzednim twoim kodem + ta sama mała poprawka + różne "zabawy" i testy]

Jakiej poprawki wymaga twój kod? Już napisałem wcześniej, ale trzeba się skupić na odczytaniu podpowiedzi a nie szukać kontrargumentów na drobną krytykę.

PS
I nie musisz nic zmieniać w wypisywaniu [po jednym znaku].

usunąłem te zerowanie tablicy na początku i jest AC...
co jest bardzo dziwne, bo to nie zabiera chyba aż tyle czasu...(acz jak pokazało doświadczenie, wychodzi na to że narbej ma chyba rację... - że to działa jak pętla.
No cóż, dzięki za podpowiedzi. Pokminię czy da się inaczej / szybciej.

2 years later

Walczę już z tym zadaniem ponad tydzień i ciągle robię coś źle…
Przeczytałem wszystkie wątki na forum związane z tym zadaniem i jedyne co zdołałem zrobić to przerobić:
pierotną wersję14 kodu, który pokazywał: Przekroczono limit czasu
na takiego potworka: https://ideone.com/15 który pokazuje: Błędna odpowiedź

Bardzo proszę o jakieś wskazówki co robię źle lub porady jak zrobić dobrze.
PS. Czy jedynym/najlepszym rozwiązaniem tego zadania jest kod oparty na wskaźnikach?

Nie

napis.erase - - jest tu zdecydowanie za wolne, a robienie tego w pętli i jeszcze przypisywanie do nowynapis to już następny gwóźdź do trumny.
Piszę o pierwotnej wersji. Potworka nie analizowałem, tylko zerknąłem, bo faktycznie tak tam nagmatwałeś, że przychylam się do twojego zdania - to potworek, ale możliwe, że to działa, a tylko jest jakiś drobny błąd.

7 months later

Cześć Wam,

Mam trochę inny problem. Sędzia odrzuca mi kod prawdopodobnie ze względu na wyciek pamięci.
Nie potrafię go zlokalizować. Może jakieś wprawne oko mi podpowie. Z góry dzięki :slight_smile:

#include<cstdlib>
#include<iostream>  
#include <cstdio>
#include <cstring>
using namespace std;

string z;
int dl;
int tab[100];

void sortowanie(int *tab, int n)
{
  for (int i=1; i<dl; i++)
{
    for (int j=dl-1; j>=1; j--)
    {
        if (tab[j]>tab[j-1])
        {
            int bufor;
            bufor=tab[j-1];
            bufor=0;
            tab[j-1]=tab[j];
            tab[j]=bufor;
        }
    }
}
}


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

for(int j=1; j<=prob; j++)
{
    cin>>z;
    dl=z.length();


    for (int i=0; i<dl; i++)
    {

        tab[i]=(int)z[i];

    }
    sortowanie(tab,dl);


    for(int i=0; i<dl; i++)
    {
        if(tab[i+1]==0)
        {
            dl=(i);
        }
        cout<<(char)tab[i];
    }

    delete[] tab;


}
return 0;
}

Może źle widzę , ale na mój gust to zwalniasz pamięć, której nie zaalokowałeś