Форум программистов, компьютерный форум CyberForum.ru

Простая задачка по массивам. - C++

Восстановить пароль Регистрация
 
Zulfat
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 26
28.11.2011, 22:11     Простая задачка по массивам. #1
Дан массив.Все его элементы,не равные нулю,переписать(сохраняя его порядок)в начало массива,а нулевые элементы - в конец.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2011, 22:11     Простая задачка по массивам.
Посмотрите здесь:

C++ Простая задачка
простая задачка C++
C++ Простая задачка на C++
Простая задачка на классы C++
C++ Непростая задачка по массивам
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
28.11.2011, 22:43     Простая задачка по массивам. #2
Цитата Сообщение от Zulfat Посмотреть сообщение
Дан массив.Все его элементы,не равные нулю,переписать(сохраняя его порядок)в начало массива,а нулевые элементы - в конец.
Фактически, вам надо реаизовать стандартный алгоритм с++ std::stable_partition. С ним задача решается в одну строчку. Например,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include   <iostream>
#include   <algorithm>
#include   <functional>
 
int main()
{
   int a[] = { 1, -4, 0, 5, 0, 4, 0, -5, 0, 0, 8 };
 
   std::copy( a, a + sizeof( a ) / sizeof( *a ),
                    std::ostream_iterator<int>( std::cout, "; " ) );
 
   std::stable_partition( a, a + sizeof( a ) / sizeof( *a ),
                                    std::bind2nd( std::not_equal_to<int>(), 0 ) ); 
 
   std::copy( a, a + sizeof( a ) / sizeof( *a ),
                    std::ostream_iterator<int>( std::cout, "; " ) );
}
SleepMaster
 Аватар для SleepMaster
40 / 40 / 1
Регистрация: 26.11.2011
Сообщений: 80
28.11.2011, 22:55     Простая задачка по массивам. #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <conio.h>
#include <algorithm>
using namespace std;
 
int main(){
    int a[10]={1,0,-2,5,0,6,2,6,0,10};
    bool key = true;
 
    while (key) {
 
        key = false;
        bool behind = false, forvard = false;
 
    for (int i=0; i<10; i++) { //нужно ли сортировать? 
 
        if (a[i]==0) behind = true;
        if (behind && a[i]!=0) { forvard = true; break; }}
 
    if (forvard) // сортировка если нужно
 {
    for (int i=0; i<9; i++)
        if (a[i]==0 && a[i+1]!=0) { swap(a[i+1], a[i]); key = true;}
    }}
    // вывод на экран
    for (int i=0; i<10; i++)
        cout << a[i] << ' ';
    getch();
    return 0;
}
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
29.11.2011, 01:30     Простая задачка по массивам. #4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
 
void user_func(int* arr, int size) {
   int* iter, *ia, *ib;
   for(iter = arr; iter != arr + size; *iter++) {
       if(*iter == 0) {
            for(ia = iter, ib = iter + 1; ia < arr + size; *ia++ = *ib++);
            *((arr) + size-1) = 0;
            --size;
            *iter--;
       }
   }
}
 
int main(void) {
  int arr[] = { 0, 0, 0, 1, -4, 0, 5, 0, 0, 84, 0, -5, 0, 0, 8 };
  int i, size = sizeof(arr) / sizeof(arr[0]);
 
  user_func(arr, size);
 
  for(i = 0; i < size; i++)
      printf("%d  ", arr[i]);
  putchar('\n');
  return 0;
}
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
29.11.2011, 02:18     Простая задачка по массивам. #5
По ссыли в конец перемещаются 20-ки, замени их на нули и всё будет круто
http://www.cplusplus.com/reference/algorithm/remove/
Yandex
Объявления
29.11.2011, 02:18     Простая задачка по массивам.
Ответ Создать тему
Опции темы

Текущее время: 16:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru