Problem z użyciem pętli

Problem z użyciem pętli
d.lodyga
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:19
0

Mam problem z zadaniem http://pl.spoj.com/problems/PP0602A/

Na ten moment zrobiłem coś takiego, czyli całe wpisanie, problem pojawia się przy wypisywaniu. Stworzyłem drugą tablicę i dwie pętle for by wypisać wyjście, ale przy pierwszej pętli wyskakuje błąd przy definiowaniu tablicy, przy drugiej tego problemu już nie ma. Nie jestem pewny też, czy mogę zrobić rozwiązanie w jednej linijce w dwóch pętlach for.

Kopiuj
#include <iostream>
const int MAX = 100;
int main(int argc, char **argv)
{
using namespace std;
	
    int t, n,i;
    int tab[MAX];
    int wyjscie[MAX];

	cin >> t;
	
	while(t--)
	{
		cin >> n;
		
		for ( i = 0; i < n; i++)

		{
			cin >> tab[i];
		}		
	}

	
	for ( i = 2; i < n ; i = i + 2;)
	{
	
		cout << wyjscie[i];
	}
	for (  i = 1 ; i < n; i = i + 2)
	{
		
		cout << wyjscie[i];
	}
	
	
	
}

 
edytowany 1x, ostatnio: kq
R1
  • Rejestracja:prawie 10 lat
  • Ostatnio:prawie 5 lat
  • Postów:208
0

nie piszę na co dzień w c++ ale ta linijka zawiera moim zdaniem błąd while(t--) tam powinien być warunek

d.lodyga
Kompilacja jest poprawna dopóki nie dodam dwóch for na dole, a samo t, to tutaj tylko ilość prób
06
Błędu nie ma. Dla t == 0 pętla zostanie przerwana.
kq
t-- to warunek
R1
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:2 dni
  • Lokalizacja:Szczecin
0

Kod który wkleiłeś się nie kompiluje. Po usunięciu zbędnego średnika zwraca błędne wartości, bo wypisujesz dane z niezainicjalizowanej tablicy. (zapisujesz do tab, wypisujesz z wyjscie, wth?). Dodatkowo:

  1. przy wypisywaniu ignorujesz pierwszą wartość,
  2. pomyliłeś kolejność parzystych i nieparzystych,
  3. wypisujesz tylko dla ostatniego zestawu danych

d.lodyga
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:19
0
kq napisał(a):

Kod który wkleiłeś się nie kompiluje. Po usunięciu zbędnego średnika zwraca błędne wartości, bo wypisujesz dane z niezainicjalizowanej tablicy. (zapisujesz do tab, wypisujesz z wyjscie, wth?). Dodatkowo:

  1. przy wypisywaniu ignorujesz pierwszą wartość,
  2. pomyliłeś kolejność parzystych i nieparzystych,
  3. wypisujesz tylko dla ostatniego zestawu danych
  1. Nie rozumiem. W którym momencie ignoruje pierwszą wartość? Wpisywanie zaczyna się od int i =0
  2. Numeruję od 1, więc do parzystych nie liczę 0. Pierwsza miejsce liczby parzystej więc to 2, następne 4 i tak dalej. Przy nieparzystych normalnie zaczynam od 1 i plus dwa. Gdzie tu popełniłem błąd?
  3. W tym wypadku dobrym wyjściem byłoby coś takiego?
Kopiuj
	while(t--)
	{
	for ( i = 2; i < n ; i = i + 2)
	{
	
		cout << wyjscie[i];
	}
	for (  i = 1 ; i < n; i = i + 2)
	{
		
		cout << wyjscie[i];
	}
	
	}
	
 
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:2 dni
  • Lokalizacja:Szczecin
0
  1. ok, gdzie wypisujesz dla indeksu zero?
  2. tablice indeksowane są od zera. Więc w pierwszej pętli wypisujesz element trzeci, potem piąty, siódmy itd; a w drugiej pętli zaczynasz od drugiego.
  3. nie, wtedy (zbędnie) byś musiał mieć tablicę tablic, tak aby każdy zestaw danych miał swoją tablicę. Zamiast tego od razu go obsługuj w pętli.

d.lodyga
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:19
0
kq napisał(a):
  1. ok, gdzie wypisujesz dla indeksu zero?
  2. tablice indeksowane są od zera. Więc w pierwszej pętli wypisujesz element trzeci, potem piąty, siódmy itd; a w drugiej pętli zaczynasz od drugiego.
  3. nie, wtedy (zbędnie) byś musiał mieć tablicę tablic, tak aby każdy zestaw danych miał swoją tablicę. Zamiast tego od razu go obsługuj w pętli.
  1. Szczerze mówiąc myślałem, że tutaj:
Kopiuj
for ( i = 0; i < n; i++)

		{
			cin >> tab[i];
		}		
	} 

To jak to poprawić w takim razie?

  1. Czegoś tutaj nie rozumiem.

Mam
*Wejście:
4 1 2 3 5
Wyjście:
2 5 1 3
*

Numeruje od 1, czyli 4 pomijam. Więc liczba 1 to jest indeks 1, liczba dwa to jest indeks 2 i tak dalej. Więc przy tej logice wybieram indeks 2 i idę dwa do przodu przy liczbach parzystych.

  1. Czyli wrzucić wszystko po jedno?
Kopiuj
 	while(t--)
	{
		cin >> n;
		
		for ( i = 0; i < n; i++)

		{
			cin >> tab[i];
		}		
		for ( i = 1; i < n ; i = i + 2)
	{
	
		cout << wyjscie[i];
	}
	for (  i = 2 ; i < n; i = i + 2)
	{
		
		cout << wyjscie[i];
	}
	
	}
	}
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:2 dni
  • Lokalizacja:Szczecin
0
  1. mylisz wczytywanie z wypisywaniem.
  2. wczytujesz od i=0, czyli poprawnie
  3. mniej więcej tak, tylko masz błędną indeksację

d.lodyga
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:19
0
kq napisał(a):
  1. mylisz wczytywanie z wypisywaniem.
  2. wczytujesz od i=0, czyli poprawnie
  3. mniej więcej tak, tylko masz błędną indeksację

A tak, no to zrobiłem, bo w poleceniu jest tablice numerujemy od 1. Wciąż chyba nie rozumiem co oznacza to sformułowanie, w przykładzie na zadaniu nie ma wypisanego ani jednej liczby z indeksem 0. W obu przypadkach indeks 0 jest pomijany:
*Przykład
Wejście:
2
4 1 2 3 5
3 9 8 7

Wyjście:
2 5 1 3
8 9 7*

No tak, wczytuje od i=0, ale tutaj wyczytuje od i=1, więc na pewno pomyliłem kolejność?

Kopiuj
    for (  i = 2 ; i < n; i = i + 2)

da: 2,4 - czyli w przypadku przykładu przy zadaniu będą to liczby 2,5.

Błędna indeksacja czyli punkty 1 i 2 jak rozumiem.

edytowany 1x, ostatnio: d.lodyga
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:2 dni
  • Lokalizacja:Szczecin
0

Nie jest pomijany, to jest po prostu początek tablicy. Pomijasz pierwszą liczbę wczytując ją do n, ale to nie ma żadnego związku z indeksacją tablicy.

  1. mylisz wczytywanie z wypisywaniem
  2. pierwszy element tablicy tab to tab[0]. Zaczynasz wypisywanie od tab[1] i tab[2]. Nigdzie nie wypisujesz tab[0].

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)