koot Temat założony przez niniejszego użytkownika |
Przesunięcie elementów tablicy w lewo i w prawo » 2017-11-01 00:15:00 Cześć! Mam do napisania program, który ma przesunąć nieparzyste elementy tablicy na lewą stronę, a parzyste na prawą. Próbowałem czegoś takiego:
int tab [8]={1,2,3,4,5,6,7,8}; for(int i=0;i <=7; i++) { if (tab[i]%2==0) swap(tab[i], tab[i+1]); }
Ale nie działa to poprawnie i w sumie nie wiem, dlaczego. Pewnie jest to banalne do napisania, ale jestem początkujący i mnie to przerasta. Ktoś pomoże? |
|
Kinexity |
» 2017-11-01 00:40:17 Utwórz nową tablicę i wkładaj elementy nieparzyste od przodu, a parzyste od tyłu. |
|
YooSy |
» 2017-11-01 00:41:18 |
|
koot Temat założony przez niniejszego użytkownika |
» 2017-11-01 07:57:23 Nie mogę utworzyć nowej tablicy. Jednym z wymogów zadania jest to, by modyfikować tę już istniejącą. |
|
Monika90 |
» 2017-11-01 09:22:09 #include <iostream> #include <algorithm> #include <iterator>
int main() { int tab[] = { 1, 2, 3, 4, 5, 6, 7, 8 }; std::partition( std::begin( tab ), std::end( tab ),[]( auto x ) { return x % 2; } ); for( const auto & x: tab ) std::cout << x << ' '; }
Albo std::stable_partition jeżeli względna kolejność elementów (nie)parzystych ma być zachowana. |
|
koot Temat założony przez niniejszego użytkownika |
» 2017-11-01 11:27:58 @Monika90 W ogóle nie rozumiem tego kodu. Chyba yba jest za skomplikowany dla mnie. Powinienem to zrobić jakimś prostym przesunięciem, tylko nie wiem jak.. |
|
YooSy |
» 2017-11-01 13:01:28 void partition( int * first, int * last ) { while( * first % 2 && first != last ) ++first; if( first == last ) return; for( int * i = first + 1; i != last + 1; ++i ) { if( * i % 2 ) { std::swap( * i, * first ); ++first; } } }
int tab[ 8 ] = { 1, 2, 3, 4, 5, 6, 7, 8 }; partition( tab, tab + 7 );
Tak mniej więcej działa std::partition. std::partitionstd::stable_partition |
|
koot Temat założony przez niniejszego użytkownika |
» 2017-11-01 14:55:26 @YooSy Działa niemal idealnie :) |
|
« 1 » 2 |