• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Program daje błędny wynik

Object Storage Arubacloud
0 głosów
815 wizyt
pytanie zadane 19 stycznia 2020 w C i C++ przez xZenit Użytkownik (760 p.)
otwarte ponownie 20 stycznia 2020 przez xZenit

 

Dane jest zadanie:

Na przemian

Limit pamięci: 64 MB

Antek z Zuzią często bawią się w pisanie liczb. Na kartce zapisują na przemian liczby całkowite - raz Zuzia, raz Antek. W wyniku zabawy powstaje zazwyczaj wiele zapisanych liczbami kartek.

Zadanie

Napisz program, który:

  • wczyta ze standardowego wejścia:
    • liczbę kartek zapisanych przez dzieci,
    • liczbę elementów ciągu,
    • ciąg liczb całkowitych,
  • dla każdego zestawu danych wypisze na standardowe wyjście wczytane liczby w taki sposób, aby najpierw pojawiły się liczby zapisane przez Antka, a następnie te, które zapisała Zuzia (według kolejności występowania na wejściu).

Wejście

Pierwszy wiersz zawiera jedną liczbę całkowitą image (image), będącą liczbą zestawów danych. W kolejnych image wierszach znajdują się opisy poszczególnych zestawów danych. Każdy zestaw składa się z liczby image (image) oraz następujących po niej liczb image (imageimage), pooddzielanych pojedynczymi odstępami.

Wyjście

Program powinien wypisać image wierszy. W image-tym z nich powinien się znajdować ciąg odpowiadający image-temu zestawowi danych. Są to wczytane liczby w zmienionej kolejności - najpierw liczby, które były na wejściu na pozycjach parzystych, następnie liczby z pozycji nieparzystych.

Przykład

Dla danych wejściowych:

2 
3 5 7 2
4 2 1 4 3

poprawną odpowiedzią jest:

7 5 2
1 3 2 4

 


Napisałem taki kod:

#include <iostream>
using namespace std;
 
int main()
{
    int ile, a, n, p, k, g, z=0, t;
    int *tab;
 
    cin>>ile;
    int prz[ile];
    for (a=0; a<ile; a)
    {
        cin>>k;
        prz[a]=k;
        int *tab = new int[(k*2)];
        for (n=0; n<k; n++)
        {
            cin>>tab[n*(a+1)];
        }
 
    a++;
    }
    for (g=0; g<ile; g)
    {
        p=0;
        while (p<=1)
        {
            for (t=0; t<prz[g]; t+=2)
            {
                cout<<tab[t]<<endl;
            }
        p++;
        }
    g++;
    }
}

Problem w tym, że program nie działa poprawnie (wypisuje na ekran błędny wynik). Czy ktoś ma może pomysł na rozwiązanie powyższego zadania w miarę przystępny sposób?

2 odpowiedzi

0 głosów
odpowiedź 19 stycznia 2020 przez wiktoz Mądrala (7,040 p.)

Najpierw robisz pętle, która wypisuje parzyste indeksy, tj.

for(int i=2;i<n;i+2) cout<<T[i]<<" ";
for(int i=1;i<n;i+2) cout<<T[i]<<" ";

Pierwsza pętla wypisuje liczby parzyste - zaczynając od 2 skacze co 2 liczby, druga pętla wypisuje liczby nieparzyste - zaczynając od 1 skacze co 2 liczby.

Nie wiem skąd wzięło się u ciebie tyle pętli i jakie one mają zadanie.

komentarz 19 stycznia 2020 przez xZenit Użytkownik (760 p.)
Wielkie dzięki za odpowiedź, jutro ją zweryfikuję.

xZenit
0 głosów
odpowiedź 19 stycznia 2020 przez tkz Nałogowiec (42,000 p.)
#include <iostream>

int main()
{
    unsigned numberOfSets{0};
    std::cin>>numberOfSets;
    while(numberOfSets--)
    {
        unsigned numberOfNumbers{0};
        std::cin>>numberOfNumbers;
        int *tab = new int[numberOfNumbers];
        for(unsigned i = 0; i < numberOfNumbers; i++)
        {
            int temp{0};
            std::cin>>temp;
            tab[i] = temp;
        }
        for(unsigned i = 0; i < numberOfNumbers; i++)
        {
            if(i%2!=0)
                std::cout<<tab[i];
            
        }
        for(unsigned i = 0; i < numberOfNumbers; i++)
        {
            if(i%2==0 && i!=0)
                std::cout<<tab[i];
        }
        delete[] tab;
    }
}

 

komentarz 19 stycznia 2020 przez xZenit Użytkownik (760 p.)
Wielkie dzięki za odpowiedź, jutro ją zweryfikuję.

xZenit
komentarz 20 stycznia 2020 przez xZenit Użytkownik (760 p.)

@tkz,

Witaj, napisany przez Ciebie program nie działa poprawnie. (Test wykonałem dla przykładowych danych z zadania - program wypisuje niepoprawne dane w złym momencie.)

Mimo wszystko, dzięki za poświęcony czas.
xZenit

komentarz 20 stycznia 2020 przez tkz Nałogowiec (42,000 p.)
Jeżeli na początku ma pobrać wszystko, anie na zmiane, to wystarczy drobna zmiana.
komentarz 20 stycznia 2020 przez xZenit Użytkownik (760 p.)
Byłbym bardzo wdzięczny, jeśli doprecyzowałbyś, o który dokładnie moment chodzi. :)

Podobne pytania

0 głosów
1 odpowiedź 306 wizyt
0 głosów
1 odpowiedź 277 wizyt
pytanie zadane 9 listopada 2018 w C i C++ przez Daaa22 Dyskutant (8,250 p.)
0 głosów
3 odpowiedzi 2,438 wizyt
pytanie zadane 21 września 2017 w C i C++ przez Ziom Początkujący (430 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...