#include <iostream>
int pack_null_i(int* arr, int num);
int* pack_null_p(int* fa, int* la);
int main(void){
int a[] = { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 };
int n = sizeof(a)/sizeof(a[0]);
n = pack_null_i(a, n);
for(int i = 0; i < n; ++i)
std::cout << a[i] << ' ';
std::cout << std::endl;
//...
int b[] = { 0, 0, 0, 0, 1, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0 };
int* e = pack_null_p(b, b + sizeof(b)/sizeof(b[0]));
for(const int* p = &b[0]; p != e; ++p)
std::cout << *p << ' ';
return 0;
}
//индексный вариант
int pack_null_i(int* arr, int num){
int a, b, i, k, m = num;
for(a = 0; a < (num - 1); ++a){
if((arr[a] == 0) && (arr[a + 1] == 0))
break;
}
for(b = a; b < num; arr[b] = arr[a]){
if(arr[a] == 0){
i = a;
while((i < m) && (arr[i] == 0))
++i;
k = i - a;
if(k > 1){
arr[++b] = k;
b += 1;
a = i;
num -= k - 2;
continue;
}
}
++b;
++a;
}
return num;
}
//вариант на указателях
int* pack_null_p(int* fa, int* la){
int* a, *b, *p, k, *e = la;
for(a = fa; a < (la - 1); ++a){
if((*a == 0) && (*(a + 1) == 0))
break;
}
for(b = a; b != la; *b = *a){
if(*a == 0){
p = a;
while((p != e) && (*p == 0))
++p;
k = (int)(p - a);
if(k > 1){
*(++b) = k;
b += 1;
a = p;
la -= k - 2;
continue;
}
}
++b;
++a;
}
return la;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgppbnQgIHBhY2tfbnVsbF9pKGludCogYXJyLCBpbnQgbnVtKTsKaW50KiBwYWNrX251bGxfcChpbnQqIGZhLCBpbnQqIGxhKTsKCgppbnQgbWFpbih2b2lkKXsKCWludCBhW10gPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKCWludCAgbiAgPSBzaXplb2YoYSkvc2l6ZW9mKGFbMF0pOwoJCgluID0gcGFja19udWxsX2koYSwgbik7Cglmb3IoaW50IGkgPSAwOyBpIDwgbjsgKytpKQoJCXN0ZDo6Y291dCA8PCBhW2ldIDw8ICcgJzsKCXN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CgoJLy8uLi4KCglpbnQgYltdID0geyAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwIH07CgoJaW50KiBlICA9IHBhY2tfbnVsbF9wKGIsIGIgKyBzaXplb2YoYikvc2l6ZW9mKGJbMF0pKTsKCWZvcihjb25zdCBpbnQqIHAgPSAmYlswXTsgcCAhPSBlOyArK3ApCgkJc3RkOjpjb3V0IDw8ICpwIDw8ICcgJzsKCXJldHVybiAwOwp9CgovL9C40L3QtNC10LrRgdC90YvQuSDQstCw0YDQuNCw0L3RggppbnQgcGFja19udWxsX2koaW50KiBhcnIsIGludCBudW0pewoJaW50IGEsIGIsIGksIGssIG0gPSBudW07CgoJZm9yKGEgPSAwOyBhIDwgKG51bSAtIDEpOyArK2EpewoJCWlmKChhcnJbYV0gPT0gMCkgJiYgKGFyclthICsgMV0gPT0gMCkpCgkJCWJyZWFrOwoJfQoJZm9yKGIgPSBhOyBiIDwgbnVtOyBhcnJbYl0gPSBhcnJbYV0pewoJCWlmKGFyclthXSA9PSAwKXsKCQkJaSA9IGE7CgkJCXdoaWxlKChpIDwgbSkgJiYgKGFycltpXSA9PSAwKSkKCQkJCSsraTsKCgkJCWsgPSBpIC0gYTsKCQkJaWYoayA+IDEpewoJCQkJYXJyWysrYl0gPSBrOwoJCQkJYiAgICAgICArPSAxOwoJCQkJYSAgICAgICAgPSBpOwoJCQkJbnVtICAgICAtPSBrIC0gMjsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJfQoJCSsrYjsKCQkrK2E7Cgl9CglyZXR1cm4gbnVtOwp9CgovL9Cy0LDRgNC40LDQvdGCINC90LAg0YPQutCw0LfQsNGC0LXQu9GP0YUKaW50KiBwYWNrX251bGxfcChpbnQqIGZhLCBpbnQqIGxhKXsKCWludCogYSwgKmIsICpwLCBrLCAqZSA9IGxhOwoKCWZvcihhID0gZmE7IGEgPCAobGEgLSAxKTsgKythKXsKCQlpZigoKmEgPT0gMCkgJiYgKCooYSArIDEpID09IDApKQoJCQlicmVhazsKCX0KCWZvcihiID0gYTsgYiAhPSBsYTsgKmIgPSAqYSl7CgkJaWYoKmEgPT0gMCl7CgkJCXAgPSBhOwoJCQl3aGlsZSgocCAhPSBlKSAmJiAoKnAgPT0gMCkpCgkJCQkrK3A7CgoJCQlrID0gKGludCkocCAtIGEpOwoJCQlpZihrID4gMSl7CgkJCQkqKCsrYikgPSBrOwoJCQkJYiAgICAgKz0gMTsKCQkJCWEgICAgICA9IHA7CgkJCQlsYSAgICAtPSBrIC0gMjsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJfQoJCSsrYjsKCQkrK2E7Cgl9CglyZXR1cm4gbGE7Cn0=