Problem z użyciem pętli

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.

#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];
	}
	
	
	
}

 
0

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

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
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?
	while(t--)
	{
	for ( i = 2; i < n ; i = i + 2)
	{
	
		cout << wyjscie[i];
	}
	for (  i = 1 ; i < n; i = i + 2)
	{
		
		cout << wyjscie[i];
	}
	
	}
	
 
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.
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:
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?
 	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];
	}
	
	}
	}
0
  1. mylisz wczytywanie z wypisywaniem.
  2. wczytujesz od i=0, czyli poprawnie
  3. mniej więcej tak, tylko masz błędną indeksację
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ść?

    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.

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].

1 użytkowników online, w tym zalogowanych: 0, gości: 1