9 / 12
Jan 2020

Witam!
Mam problem z zaliczeniem tego zadania. Według mnie wszystko jest OK, ale sędzia nie uznaje tego kodu.
Oto kod:

#include <iostream>

using namespace std;

int main()
{
    int test;
    cin>>test;
    for(int i=0; i<test; i++)
    {
        int ilosc;
        cin>>ilosc;
        int tablica[ilosc];

        for(int i=0; i<ilosc; i++)
        {
        cin>>tablica[i];
        }

        int tablica2[ilosc-1];
        int n=0;
        for(int i=1; i<ilosc; i++)
        {
        if(i%2==0){
        tablica2[n]=tablica[i];
        n++;
        }
        }

        for(int i=1; i<ilosc; i++)
        {
        if(i%2!=0){
        tablica2[n]=tablica[i];
        n++;
        }
        }

        for(int i=0; i<ilosc-1; i++)
        {
        cout<<tablica2[i]<<" ";
        }
        cout<<endl;
        }
    return 0;
}

Z góry dziękuje za pomoc :smiley:

  • created

    Apr '18
  • last reply

    Nov '21
  • 11

    replies

  • 1.2k

    views

  • 10

    users

  • 3

    likes

  • 2

    links

W pętli ‘for’ gdzie rozstrzygasz czy licznik jest parzysty czy nieparzysty, rozpoczynasz od licznika o wartości 1. Dalej w kodzie pętli masz przypisanie ‘tablica[i]’ więc przypisując zaczynasz od ‘tablica[1]’ czyli drugiego elementu tablicy, zwyczajnie gubisz pierwszy element tablicy ‘tablica[0]’. Stosujesz mało bezpieczny zabieg a właściwie raczej niebezpieczny, mianowicie masz główną pętle z licznikiem ‘i’ a potem w zagnieżdzonej pętli znowu masz licznik ‘i’. Zastanów się jakie zasiegi mają liczniki, jak są nadpisywane, jaką wartość mają w konkretnej iteracji, poczytaj o operatorze zasięgu dla zmiennych, może warto nazwać inaczej liczniki np. ‘i ,j ,k, l’? Dodatkowo polecam zamiast robienia dwóch różnych pętli dla sprawdzenia warunku użyć ‘if…else’. Pozdrawiam.

2 małe podpowiedzi:
Nie powinno się robić tak: int tablica[ile]; chyba że ile jest typu constexpr.
Pomyśl że zamiast pisania modulo możesz w petli for(int i=0;i<ile;i+=2) a pętla przeskakuje ci o dwa.
Spróbuj też nie definiować tylu tablic starczy jedna bo to czyni twój kod nieczytelny.

3 months later

Mam działający w codeblocks program ale na spoju wyskakuje błąd wykonania SIGABRT

#include <iostream>

using namespace std;
int t,n;
int main()
{
    cin >>t;
    for(int a=1; a<=t; a++)
    {
        int *tablica;
        tablica = new int [n];
        cin >>n;
        for (int i=1; i<=n; i++)
            {cin >> tablica[i];}

        for(int i=2; i<=n; i+= 2)
            {cout << tablica[i] << endl;}

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

    }


    return 0;
}

Elementy w tablicy mają indeksy od 0 do n-1.

Twoje pętle for sięgają po element o indeksie n, który nie istnieje, stąd SIGABRT.

3 months later

main2.cpp4 (720 Bytes)
nie wiem czemu ciągle oczekuje na kolejne dane a się nie kończy??


#include

using namespace std;
int a[100],n,t;
int main()
{
cin>>t;
for (int i=0;i<=t-1;t++)
{
cin>>n;
for (int j=0;(j<n);j++)
{
cin>>a[j];
for (int k=0;k<n;k+=2)
cout<<a[k+1]<<’ ‘;
for (int l=0;(l<(n+1));l+=2)
cout<<a[l*2]<<’ ';
cout<<endl;
}
}
return 0;
}

znalazłem błąd w pierwszej pętli for zamiast i to inkrementowałem t…

1 year later

Witam pomoże ktoś mi z moim kodem napisałem program ale sędzia go nie uznaje! Bardzo bym był wdzięczny za pomoc.(ZADANIE PRZEDSZKOLANKA)
kod:

#include
#include <time.h>
#include
using namespace std;
int grupa1,grupa2,grup,cuk,z;
int k=0;
int main()
{
srand(time(NULL));

  cin>>grup;

for(int i=0;i<grup;i++)
{
grupa1=rand()%20+10;
grupa2=rand()%20+10;
cout<<grupa1<<" "<<grupa2<<endl;
if(grupa1%grupa2==0)
{
    cout<<grupa1<<endl;
    continue;
}
else
if(grupa2%grupa1==0)
{
    cout<<grupa2<<endl;
    continue;
}

for(int i=9;i>=2;i–)
{
if(grupa1%i==0 && grupa2%i==0)
{
cuk=(grupa1grupa2)/i;
cout<<cuk<<endl;
break;
}
else
if(i<=2)
{
z=grupa1
grupa2;
cout<<z<<endl;
break;
}
}

}
return 0;
}

Powinieneś dopisać się do odpowiedniego tematu zgodnego z zadaniem jakie chcesz rozwiązać.

Po co są te linijki:

Powinieneś czytać wartości a nie losować. np.
cin>>grupa1>>grupa2;
Program sędziujący przesyła te wartości do Twojego programu.

Nie możesz wypisywać:

Masz wypisać tylko wynik.

Przepraszam nie zauważyłem gdzie piszę, ale dzięki wielkie. Jesteś wielki. Działa :smiley: .

1 year later