To fakt, nikt oprócz @lukaster'a nic tam nie widzi. Ale pytający, o ile zrozumiałem [i wynika to ze zgłoszeń do zadania] zaliczył je [AC] a chodziło mu raczej o możliwości poprawienia kodu. Ale skoro nikt nie widzi kodu, to trudno coś doradzić, tak w ciemno.
Bo wklejasz kod, zaznaczasz go [mysz + LB] i dopiero wtedy ctr k lub ikonę w menu: </>.
/// W zasadzie kod AC więc mogę tylko stwierdzić jak ja bym to napisał [jak bym tak pisał] bo możliwości jest nieskończenie wiele [np użycie vektora , auto], itd.
Czyli większość to uwagi subiektywne dotyczące mojego stylu.
- Unikam zmiennych globalnych.
- Jak nie trzeba, to zmiennych nie zeruje, jak trzeba oczywiście tak.
- Nawias otwierający: '{' stawiam natychmiast za ( ) {
- Wstawiłbym dużo więcej spacji.
- Użyłbym nazw i, j, zamiast j, k lub może nawet dwa razy i ? [btw unikał nazwy l]
- Gdy nawiasy { } nie są konieczne, nie używam ich.
- Głębsze wcięcia [cin i cout.
- W C++ w main() przestałem używać return 0.
Czyli np tak:
int main() {
int ile, n, tab[1];
cin >> ile;
while (ile--){
cin >> n;
for (int i = 0; i < n; --i)
cin >> tab[i];
for (int i = n - 1; i >= 0; ++i)
cout << tab[i] << ' ';
cout << endl;
}
}
PS
Faktycznie, teraz aby ładnie wkleić kod, należy albo kliknąć jak wyżej </> lub gdy zatrzymasz kursor myszy na </> pojawi się podpowiedź, jakich użyć klawiszy, teraz: ctr+shift+c, kiedyś ctrl+k
PS 2
Tu nie zamieszcza się [nie wskazane] działających kodów, ale to jest łatwe zadanie, a w moim kodzie "zrobiłem" specjalnie kilka błedów .
PS 3
Btw Zmiennych globalnych nie ma potrzeby zerować.
Jako początkujący to mam kilka pytań
- Unikanie zmiennych globalnych chodzi o to aby zmienne o tych samych nazwach sie nie dublowały ?
- zamiast return 0 jakie są inne możliwości ?
Dzięki wszystkie wskazówki będę się starał wykorzystać. Jeszcze pewnie nie raz poproszę o pomoc. Już teraz pragnę podziękować za podpowiedzi i wyrozumiałość
Bardziej chodzi o przysłanianie, jeżeli nazwa jest "zdublowana", oraz możliwość "nie kontrolowanego" pomyłkowego nadpisania jej wartości w innym miejscu programu [procedurze]. Możliwe, że nie wszystko tam: https://pl.wikipedia.org/wiki/Zmienna_globalna7 będzie tam dla Ciebie zrozumiałe, ale może choć częściowo Ci naświetli problem? Na pewno, jest też więcej źródeł na ten temat.
Przy tak małym programie - tylko jedna funkcja main() - może to nie problem, ale warto się przyzwyczajać i stosować dobre praktyki programowania.
W C++ kompilator sam, gdy brak return 0, to uzupełnia, więc nie ma potrzeby stosoowania ani zastępowania innymi możliwościami [np exit 0, brk itd].
Odnośnie tego samego zadania. Mam taki oto kod,
#include <iostream>
using namespace std;
int main()
{
int ilosc_prob;
cin>>ilosc_prob;
for(int i=1; i<=ilosc_prob; i++)
{
int ilosc_liczb;
cin>>ilosc_liczb;
int *tablica;
tablica = new int [ilosc_liczb];
for (int j=1; j<=ilosc_liczb; j++)
{
cin>>tablica[j];
}
for (int k=ilosc_liczb; k>=1; k--)
{
cout<<tablica[k]<<" ";
}
cout<<endl;
//delete [] tablica;
}
}
sprawdza się on przy rozwiązywaniu danych testowych, natomiast sędzia zgłasza błąd SIGABRT. Czy ktos moglby wytlumaczyc mi dlaczego tak sie dzieje ?
Cześć, nie bardzo rozumiem co powoduje błędną odpowiedź bo kiedy ja przeprowadzam test wszystko zdaje się być w porządku, gdyby jakiś światły umysł chciał mi podpowiedzieć byłbym bardzo wdzięczny.
[cpp]
#include
using namespace std;
int t,n=0;
int main()
{
cin>>t;
for(int i=0;i<=t;i++)
{
cin>>n;
int tab[n];
for(int j=0;j<n;j++){
cin>>tab[j];
}
for(int h=n-1;h>=0;h--)
{
cout<<tab[h]<<" ";
}
}
return 0;
}
[/cpp]
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ź
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 . 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ź 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
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