23 / 80
Jul 2017

Zadziałało dzięki wielkie, tak myślałem ze jest jakiś problem z rozdzielaniem wyjść. Bardzo mi pomogłeś:>

2 months later

Witam serdecznie

Czy może mi ktoś powiedzieć dlaczego dostaje komunikat błędna odpowiedź?:

int t, i=1, tablica[101];

cin>>t;

    do
        {
        cin>>tablica[0];

            for (int j=1; j<=tablica[0]; j++)

                cin>>tablica[j];

            for (int j=tablica[0]; j>=1; j--)

                cout<<tablica[j]<<" ";

        cout<<endl;
        i=i+1;
        }
   while (i==t);

Będę bardzo wdzięczny za podpowiedź :slight_smile:

In

3
7 1 2 3 4 5 6 7
3 3 2 11
3 1 2 3

Poprawny out:

7 6 5 4 3 2 1
11 2 3
3 2 1

Zaprawdę powiadam Ci, wypisanie poprawnej odpowiedzi dla testów przykładowych pozwala jedynie stwierdzić, że być może zrozumiałeś treść zadania :wink: . Resztę testów musisz sam wymyślać.

Przy okazji: co to za voodo?

for (int j=1; j<=tablica[0]; j++)
cin>>tablica[j];
for (int j=tablica[0]; j>=1; j--)
cout<<tablica[j]<<" ";

Nie lepiej normalnie?

int ile;
cin >> ile;
for (int j=0; j<ile; j++)
cin>>tablica[j];
for (int j=ile-1; j>=0; j--)
cout<<tablica[j]<<" ";

Trochę zaciemnia to Twoje intencje.

Dziękuję za odpowiedź :slight_smile: znalazłem błąd.

Co do voodoo - uczę się sam, mam swoje lata a zaczynam od zera (kiedyś na studiach pisałem w Pascalu) więc czasami mam problem z myśleniem "out of the box". Po prostu stwierdziłem że wszystkie zmienne liczby wczytam do tablicy :).

Nie wiem gdzie szukać takich rozjaśnień.

Jeszcze raz dzięki za pomoc :slight_smile:

4 months later

witam,
Czy doradzi ktoś początkującej jak zmienić kod dostający SIGSEGV (Segmentation fault) na SPOJ'u by został zaakceptowany? Błąd dot. ograniczonego dostępu do pamięci, ale nic mi to nie mówi :confused:
Oczywiście tak ja w temacie - chodzi o zadanie PP0502B - Tablice
Chyba że należy tutaj użyć wskaźników?
Mam kod zbliżony rozumowaniu do kodu użytkowników: lukaster i wuduchild. Wasze kody dostały AC?

aby nie mieć SIGSEV nie należy używać elementów tablicy z poza jej zakresu :slight_smile:

czyli np. dla:

int tabela[10];

wolno użyć tabela[0], tabela[1], ..., tabela[9] ale nie tabela[-1], czy tabela[10]

Człowieku, naucz się najpierw pisać i mówić, a dopiero potem zajmij się programowaniem. "Mam taki problem nie bardzo rozumie..." Sorry za upierdliowść ale niezmiernie mnie denerwuje powszechny analfabetyzm...

Chętnie zniosę dysleksję, dysgrafię, niegramatyczne i nieortograficzne pytania.

Tylko niech one mają sens, a nie, że sugerują, że zadający pytanie skończył czytanie podręcznika C/C++
na okładce, ale już wstęp był dla niego za trudny

3 months later

może po prostu przetestuj dla przykładowych danych z zadania twoje rozwiązanie na ideone.com17, a sam zobaczysz co jest nie tak

równie dobrze możesz przetestować na swoim komputerze przekierowując wejście i wyjście do pliku

2 months later
import re
def remove_duplicates(values):
    output = []
    seen = set()
    for value in values:
        if value not in seen:
            output.append(value)
            seen.add(value)
    return output

for i in range(0, int(input())):
    num = str(input())

    pattern = re.compile(r'[0-9-]{1,}')
    matches = pattern.finditer(num)

    tab = []
    for match in matches:
        tab.insert(0, match.group())
    tab = remove_duplicates(tab)
    print(*tab)

Powie mi ktoś, gdzie tu ten sędzia widzi “Błędną odpowiedź”?
Input/Output taki sam jak w przykładzie http://pl.spoj.com/problems/PP0502B/1.
Testowane tutaj: https://ideone.com/neYMOG4 oraz w IDE.
Ktoś ma jakieś sugestie? (Od razu mówię że wykluczona jest niespójność kodu między wersją środowiska, w której został napisany a tą, w której jest sprawdzany)

To ma bardzo małe znaczenie, żeby nie powiedzieć, że bez znaczenia. To tylko malutki przykład, jak powinien działać program.

BTW
Skąd wziąłeś pomysł na usuwanie duplikatów? Nic o tym w zadaniu nie napisano.
Dla takiego np testu:
5 1 2 2 2 3

Poprawny out to:
3 2 2 2 1

bez zbędnego dodatkowego kombinowania, usuwania [i udziwniania :wink: ]

Jaki ja jestem teeeeeeeepyyyyy.
Zapamiętam, czytać ze zrozumieniem.
Dzięki wielkie.

6 months later

Czy ktoś mógłby rzucić okiem na wytwór mojej wyobraźni i stwierdzić czemu działa poprawnie dopiero po przekroczeniu pierwszej połowy tablicy. Chciałem ogarnąć to na wskaźnikach.

#include
//dynamiczne alokowanie
using namespace std;
int n;
int main()
{ cout<<"podaj ilosc danych ";
cin>> n;

int *wskaznik;
wskaznik= new int [n];
int *wskaznik2;
wskaznik2= new int [n];

for (int i=0; i<n; i++)
{cin>>wskaznik[i];}

for (int i=0; i<n; i++)
{cout<<wskaznik[i]<<" ";}
cout<<endl;

for (int i=0; i<n; i++)
{wskaznik2[(n-1)-i]=wskaznik[i];
 cout<<wskaznik2[i]<<" ";   }

delete [] wskaznik, wskaznik2;

return 0;

}

dziękuję

Ty poprawisz formatowanie swojego kodu (patrz kilka postów wyżej jak ładnie to zrobił @hartez) lub ewentualnie prześlij go przez ideone, a ja wtedy Ci powiem co zepsułeś.

Czyli chcę żeby Twój kod nie wyglądał tak:
#include
//dynamiczne alokowanie
using namespace std;
int n;
int main()
{ cout<<"podaj ilosc danych ";

a tak:

#include <iostream>
//dynamiczne alokowanie
using namespace std;
int n;
int main()
{
    cout<<"podaj ilosc danych ";

Przeanalizuj ten fragment to znajdziesz odpowiedź na swoje pytanie.

wiem że ten fragment szwankuje, ale nie wiem czemu;
dla mnie wygląda to tak jakby dla pierwszej połowy wyświetlały się adresy zamiast wartości;
próbowałem dorzucić * oraz &, ale nie mogę tego potem skompilować;
głowiłem się nam przedziałem, ale uznałem że jesk OK;
nie ogarniam tych wskaźników

4 redysz