#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <time.h>
#define RANDRANGE(min_, max_) (rand() % ((max_) + 1 - (min_)) + (min_))
typedef struct result_s
{
int *arr;
size_t size;
} result_s;
int **Init2DArray(size_t h, size_t w)
{
int **arr
= (int **)malloc(sizeof(int *) * h
);
for (size_t i = 0; i < h; i++)
{
arr
[i
] = (int *)malloc(sizeof(int) * w
); }
return arr;
}
void Set2DArray(int **arr, size_t h, size_t w)
{
for (size_t i
= 0; i
< h
; i
++, putchar('\n')) for (size_t j = 0; j < w; j++)
arr[i][j] = RANDRANGE(-100, 200);
}
void Print2DArray(int **arr, size_t h, size_t w)
{
for (size_t i
= 0; i
< h
; i
++, putchar('\n')) for (size_t j = 0; j < w; j++)
}
void PrintVector(int *arr, size_t size)
{
for (size_t i = 0; i < size; i++)
}
result_s *ProcessData(int **arr, size_t h, size_t w)
{
int *a = NULL;
int *b = NULL;
size_t a_size = 0;
size_t b_size = 0;
for (size_t i
= 0; i
< h
; i
++, putchar('\n')) {
for (size_t j = 0; j < w; j++)
{
if (arr[i][j] % 2)
{
a_size++;
int *tmp
= (int *)realloc(a
, sizeof(int) * a_size
); a = tmp;
a[a_size- 1] = arr[i][j];
}
else
{
b_size++;
int *tmp
= (int *)realloc(b
, sizeof(int) * b_size
); b = tmp;
b[b_size- 1] = arr[i][j];
}
}
}
result_s
*res
= (result_s
*)malloc(sizeof(result_s
) * 2); res[0].arr = a;
res[0].size = a_size;
res[1].arr = b;
res[1].size = b_size;
return res;
}
int main()
{
const size_t h = 8;
const size_t w = 4;
int **arr = Init2DArray(h, w);
Set2DArray(arr, h, w);
Print2DArray(arr, h, w);
result_s *res = ProcessData(arr, h, w);
PrintVector(res[0].arr, res[0].size);
PrintVector(res[1].arr, res[1].size);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGFzc2VydC5oPgojaW5jbHVkZSA8dGltZS5oPgoKI2RlZmluZSBSQU5EUkFOR0UobWluXywgbWF4XykgKHJhbmQoKSAlICgobWF4XykgKyAxIC0gKG1pbl8pKSArIChtaW5fKSkKCnR5cGVkZWYgc3RydWN0IHJlc3VsdF9zCnsKCWludCAqYXJyOwoJc2l6ZV90IHNpemU7Cn0gcmVzdWx0X3M7CgppbnQgKipJbml0MkRBcnJheShzaXplX3QgaCwgc2l6ZV90IHcpCnsKCWludCAqKmFyciA9IChpbnQgKiopbWFsbG9jKHNpemVvZihpbnQgKikgKiBoKTsKCWFzc2VydChhcnIpOwoJCglmb3IgKHNpemVfdCBpID0gMDsgaSA8IGg7IGkrKykKCXsKCQlhcnJbaV0gPSAoaW50ICopbWFsbG9jKHNpemVvZihpbnQpICogdyk7CgkJYXNzZXJ0KGFycltpXSk7Cgl9CglyZXR1cm4gYXJyOwp9Cgp2b2lkIFNldDJEQXJyYXkoaW50ICoqYXJyLCBzaXplX3QgaCwgc2l6ZV90IHcpCnsKCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaDsgaSsrLCBwdXRjaGFyKCdcbicpKQoJCWZvciAoc2l6ZV90IGogPSAwOyBqIDwgdzsgaisrKQoJCQlhcnJbaV1bal0gPSBSQU5EUkFOR0UoLTEwMCwgMjAwKTsKfQoKCnZvaWQgUHJpbnQyREFycmF5KGludCAqKmFyciwgc2l6ZV90IGgsIHNpemVfdCB3KQp7Cglmb3IgKHNpemVfdCBpID0gMDsgaSA8IGg7IGkrKywgcHV0Y2hhcignXG4nKSkKCQlmb3IgKHNpemVfdCBqID0gMDsgaiA8IHc7IGorKykKCQkJcHJpbnRmKCIlNmQiLCBhcnJbaV1bal0pOwp9Cgp2b2lkIFByaW50VmVjdG9yKGludCAqYXJyLCBzaXplX3Qgc2l6ZSkKewoJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspCgkJcHJpbnRmKCIlNmQiLCBhcnJbaV0pOwoJcHV0Y2hhcignXG4nKTsKfQoKcmVzdWx0X3MgKlByb2Nlc3NEYXRhKGludCAqKmFyciwgc2l6ZV90IGgsIHNpemVfdCB3KQp7CglpbnQgKmEgPSBOVUxMOwoJaW50ICpiID0gTlVMTDsKCQoJc2l6ZV90IGFfc2l6ZSA9IDA7CglzaXplX3QgYl9zaXplID0gMDsKCQoJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoOyBpKyssIHB1dGNoYXIoJ1xuJykpCgl7CgkJZm9yIChzaXplX3QgaiA9IDA7IGogPCB3OyBqKyspCgkJewoJCQlpZiAoYXJyW2ldW2pdICUgMikKCQkJewoJCQkJYV9zaXplKys7CgkJCQlpbnQgKnRtcCA9IChpbnQgKilyZWFsbG9jKGEsIHNpemVvZihpbnQpICogYV9zaXplKTsKCQkJCWFzc2VydCh0bXApOwoJCQkJYSA9IHRtcDsKCQkJCWFbYV9zaXplLSAxXSA9IGFycltpXVtqXTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCWJfc2l6ZSsrOwoJCQkJaW50ICp0bXAgPSAoaW50ICopcmVhbGxvYyhiLCBzaXplb2YoaW50KSAqIGJfc2l6ZSk7CgkJCQlhc3NlcnQodG1wKTsKCQkJCWIgPSB0bXA7CgkJCQliW2Jfc2l6ZS0gMV0gPSBhcnJbaV1bal07CgkJCX0KCQl9Cgl9CgkKCXJlc3VsdF9zICpyZXMgPSAocmVzdWx0X3MgKiltYWxsb2Moc2l6ZW9mKHJlc3VsdF9zKSAqIDIpOwoJcmVzWzBdLmFyciAgPSBhOwoJcmVzWzBdLnNpemUgPSBhX3NpemU7CglyZXNbMV0uYXJyICA9IGI7CglyZXNbMV0uc2l6ZSA9IGJfc2l6ZTsKCXJldHVybiByZXM7Cn0KCQkKCmludCBtYWluKCkKewoJc3JhbmQoKHVuc2lnbmVkIGludCl0aW1lKE5VTEwpKTsKCQoJY29uc3Qgc2l6ZV90IGggPSA4OwoJY29uc3Qgc2l6ZV90IHcgPSA0OwoJaW50ICoqYXJyID0gSW5pdDJEQXJyYXkoaCwgdyk7CQoJCglTZXQyREFycmF5KGFyciwgaCwgdyk7CgkKCVByaW50MkRBcnJheShhcnIsIGgsIHcpOwoJCglyZXN1bHRfcyAqcmVzID0gUHJvY2Vzc0RhdGEoYXJyLCBoLCB3KTsKCQoJcHV0cygidmVjMToiKTsKCVByaW50VmVjdG9yKHJlc1swXS5hcnIsIHJlc1swXS5zaXplKTsKCQoJcHV0cygidmVjMjoiKTsKCVByaW50VmVjdG9yKHJlc1sxXS5hcnIsIHJlc1sxXS5zaXplKTsKCQoJZnJlZShyZXNbMF0uYXJyKTsKCWZyZWUocmVzWzFdLmFycik7CglmcmVlKHJlcyk7CgkKCXJldHVybiAwOwp9Cg==