Задана
последовательность чисел. Сдвиньте все нули в конец последовательности,
сохраним относительный порядок ненулевых элементов.
Вход. Первая строка
содержит количество элементов n (1
≤ n ≤ 100) в
последовательности. Вторая строка содержит n
целых чисел, по модулю не больших 100.
Выход. Выведите
последовательность чисел так чтобы все ее нули были перенесены в конец, а
относительный порядок ненулевых элементов не изменился.
| 
   Пример
  входа 1  | 
  
   Пример
  выхода 1  | 
 
| 
   6 3 0 5 0 0 -4  | 
  
   3 5 -4 0 0 0  | 
 
| 
   | 
  
   | 
 
| 
   Пример
  входа 2  | 
  
   Пример
  выхода 2  | 
 
| 
   7 0 0 -4 3 0 1
  0  | 
  
   -4 3 1 0 0 0
  0  | 
 
массивы
Читаем входную последовательность в массив m. В нем же будем
строить и результирующий массив (чтобы не выделять память под еще один массив
такой же длины). Изначально результирующий массив пуст (пусть j указывает на длину результирующего массива,
изначально j = 0). Если очередное
число val входной последовательности
ненулевое, то положим его в конец результирующего массива и увеличим индекс j на 1: m[j++] = val. Если val = 0, то ничего не делаем. 
По завершению обработки в ячейках m[0 .. j – 1] содержится входная последовательность без нулевых элементов.
Занесем в ячейки m[j .. n – 1] нули и выведем весь массив m[0 ..
n – 1].
Промоделируем второй тест.








Объявим рабочий массив m.
int m[110];
Читаем входную последовательность в массив m.
scanf("%d",&n);
for(i = 0; i < n; i++)
  scanf("%d",&m[i]);
Установим изначально длину результирующего массива равной
нулю (j = 0). В переменной i (0 ≤ i < n) перебираем индексы
элементов последовательности. Ненулевые элементы m[i] заносим в конец результирующего массива (m[j] = m[i]), увеличивая
его размер на единицу (j++).
for(j = i = 0; i < n; i++)
  if (m[i] !=
0) m[j++] = m[i];
Оставшиеся элементы массива вплоть до (n – 1)-го заполняем нулями.
while (j < n) m[j++] = 0;
Выводим результирующую последовательность.
for(i = 0; i < n; i++)
  printf("%d
",m[i]);
printf("\n");
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
int n, i;
vector<int> v;
int f(int a, int b)
{
  if (a == 0
&& b == 0) return 0;
  if (a == 0) return 0;
  if (b == 0) return 1;
  return 0;
}
int main(void)
{
  scanf("%d",
&n);
 
v.resize(n);
  for (i =
0; i < n; i++)
    scanf("%d",
&v[i]);
 
stable_sort(v.begin(), v.end(), f);
  for (i =
0; i < n; i++)
    printf("%d
", v[i]);
  printf("\n");
  return 0;
}
import java.util.*;
public class Main
{
 
public static class MyFun implements Comparator<Integer> 
 
{
   
public int compare(Integer a, Integer b)
   
{
     
if (a == 0 && b == 0) return 0;
     
if (a == 0) return 1;
     
if (b == 0) return -1;
     
return 0;
   
}
 
}
 
public static void main(String[] args) 
 
{
   
Scanner con = new Scanner(System.in);
   
int n = con.nextInt();
   
Integer m[] = new Integer[n];
   
for(int i = 0; i < n; i++) m[i] = con.nextInt();
 
   
Arrays.sort(m, new MyFun());
     
   
for(int i = 0; i < n; i++) System.out.print(m[i] + " ");
   
System.out.println();
   
con.close();
 
}
}
from functools import
cmp_to_key
def compare(a, b):
  if a == 0 and b == 0: return 0
  if a == 0: return 1
  if b == 0: return -1
  return 0
n = int(input())
lst = map(int, input().split())
res = sorted(lst, key = cmp_to_key(compare))
print(*res)