Postovani Teo,
opet ja korisnik Dusan Vidojevic.Kako si mi ti(ako smem da koristim ti a ne Vi,posto imam samo 11 godina) odgovorio na pitanje za NZD i NZS(koji sam uspeo da resim) molio bih te (Vas) da mi odgovoris(odgovorite) zasto u zadatku “Ispis u obrnutom redu” ne radi grader za prvi test primer,i to ne radi nikome.
Izvini sto si ovako dugo cekao,evo linka: http://bubblebee.petlja.org/problemi/Zbirka/dvobojka#problem
evo i mog koda:
include #include #include <math.h>
using namespace std;
int main()
{
int n,i;
cin>>n;
int niz[n];
for(i=0;i<n;i++)
{
cin>>niz[i];
}
for(i=0;i<n;i++)
{
if(niz[i]%2==0)
{
cout<<niz[i]<<endl;
}
}
for(i=0;i<n;i++)
{
if(niz[i]%2!=0)
{
cout<<niz[i]<<endl;
}
}
return 0;
}
Inace ovde imas dva prolaza kroz niz (nakon ucitavanja) a trazi se samo jedan prolaz. Elemente prvo učitati u niz, a zatim taj niz transformisati u linearnom vremenu (samo jednim prolazom kroz niz).
Ni ja “ne umem” da resim ovaj zadatak Prilicno sam siguran da checker nije dobro postavljen. Mozda @zmajcek moze da proveri da li ovaj zadatak uopste ima postavljen poseban checker?
Da li mozes da razmislis kako u jednom prolazu kroz niz mozes da izmenis niz, tako da svi parni brojevi ostanu na pocetku a da sve neparne brojeve gurnes na kraj?
Uzmi dve promenljive za indekse i=1 j=n. U svakom koraku pomeraš ka sredini ili i ili j. Kada naiđeš na dva broja koja nisu na svom mestu rotiraj ih. Staješ kada je i=j. Može?
Jeste, samo što nećeš ići kroz niz redom od 1 do n nego sa dve strane pa ćeš levo->desno proći k elemenata a desno->levo n-k, što mu u zbiru dođe n. Na ovom principu ti je quick sort, sad ne znam koliko znas o tome, ali sigurno postoji na wikipediji grafički prikaz da ti pojasni.
#include <iostream>
#include <vector>
using namespace std;
void razmeni(int& a, int& b)
{
int c = a;
a = b;
b = c;
}
int main()
{
int n;
cin >> n;
vector<int> v(n);
for (int i = 0; i < n; i++)
cin >> v.at(i);
int i = 0;
int j = n-1;
while (i < j)
{
while (v.at(i) % 2 == 0 && i<j)
i++;
while (v.at(j) % 2 == 1 && i<j)
j--;
if (i<j)
{
razmeni(v.at(i), v.at(j));
i++;
j--;
}
}
for (int i = 0; i < n; i++)
cout << v.at(i) << endl;
return 0;
}