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
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?
Będzie ktoś na tyle miły i powie co u mnie się nie zgadza?
LINK DO KODU25
Pozdrawiam.
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
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 ]
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 ";
Spójrz na ten kod. Na prawdę masz tam
#include
bez niczego?
Bez wcięć programujesz?
Odpiszę za jakieś dwie godziny, a Ty popraw.
Edit
Więc tak:
-
Co to jest
cout<<"podaj ilosc danych ";
? Twój program ma wyświetlać tylko i wyłącznie to co jest podane w zadaniu. Twój output ma być identyczny z podanym w zadaniu. Każda literka ma się zgadzać. Nie możesz wypisywać takich rzeczy jak “podaj ilosc danych” bo zostanie to przecież uznane za część odpowiedzi czyli za błędną odpowiedź. -
Dlaczego definiujesz
n
przedint main
? W jakim celu? Jeżeli jesteś kolejnym słuchaczem kursu Pana Zelenta (który bardzo upodobał sobie zmienne globalne) to natychmiast zmień kurs. Jeśli mam rację to jest to dla Ciebie najważniejszy punkt i zrób to jak wspomniałem: natychmiast. -
Treść zadania:
Najpierw liczba testów t (t ≤ 100). Następnie dla każdego testu liczba n (n ≤ 100) i n liczb oddzielonych spacjami.
Jeszcze raz:
Najpierw liczba testów t (t ≤ 100).
gdzie jest Twój kod obsługujący tę zmienną?
-
To co wskazała @yula. Podpowiedź: przypisujesz coś do jakiegoś elementu tablicy, a wyświetlasz inny.
-
Co to robi i po co:
for (int i=0; i<n; i++)
{cin>>wskaznik[i];}
for (int i=0; i<n; i++)
{cout<<wskaznik[i]<<" ";}
cout<<endl;
przecież masz wyświetlić liczby z tablicy w odwrotnej kolejności, a Ty je tutaj wyświetlasz tuż po wpisaniu tak jak zostały podane. W ogóle tego nie powinieneś robić.
- Kod ma być ładny, a nie tylko działać. Nie rób takiego czegoś:
for (int i=0; i<n; i++)
{cout<<wskaznik[i]<<" ";}
cout<<endl;
bo to boli innych wokół i ich rodziny. Yuli dzieci płaczą, narbej chodzi zdenerwowany, tarpauwatratar ma depresję, a jaroo gubi się przy dodawaniu.
ten fragment (gdyby w ogóle do czegoś był potrzebny) mógłby wyglądać przejrzyście:
for (int i = 0; i < n; i++)
{
cout << wskaznik[i] << " ";
}
cout << endl;
są zadania na jak najmniejszą liczbę znaków (challenge), ale to nie jest jedno z nich.
Poprawisz to wszystko i będzie przez chwilę zielono w zakładce status
mam zaliczone to zadanie na spoju juz dawno
zrobilem petle odwrotna ktora wypisuje mi wartosci z orginalnej tablicy
wiem ze mozna je zrobic na jednej tylko tablicy
chcialem sie dowiedziec jak przepisac wartosci z jednej tablicy do drugiej na wskaznikach bo ucze sie sam z neta (Zelenta ogladalem tez btw i troche zamula ale daje niezle przyklady)
Mozecie mi polecic jakis dobry pdf albo forum o wskaznikach i ogolnie dzialaniach na tablicach takich jak zliczanie elementow, scalanie kopiowanie wycinanie porownywanie wartosci na dwoch tablicach z alokowana pamiecia?