- 论坛徽章:
- 36
|
本帖最后由 cokeboL 于 2013-04-01 14:23 编辑
- #include <stdio.h>
- #define NON_EXIST (-1)
- #define ARR_SIZE_MAP(arr_n) { arr_n, sizeof(arr_n)/sizeof(arr_n[0]) }
- int n_1[] = {1, 2, 3, 5, 8, 9, 14};
- int n_2[] = {2, 3, 6, 7, 10, 14};
- //...
- int n_max[] = {1, 3, 14, 15, 28};
- static int *arr_mixed = 0;
- static struct Arr_map{
- int *array_n;
- int array_size;
- }array_size_map[] = {
- ARR_SIZE_MAP(n_1),
- ARR_SIZE_MAP(n_2),
- // ...
- ARR_SIZE_MAP(n_max)
- };
- void arr_mixed_init(struct Arr_map *am)
- {
- if(arr_mixed){
- free(arr_mixed);
- arr_mixed = 0;
- }
-
- arr_mixed = (int*)malloc(am->array_size + 1);
- if(!arr_mixed){
- printf("arr_mixed malloc failed: %m");
- return;
- }
- for(int i = 0; i < am->array_size; i++){
- arr_mixed[i] = am->array_n[i];
- }
- arr_mixed[am->array_size] = NON_EXIST;
- }
- void arr_mixed_destroy()
- {
- if(arr_mixed){
- free(arr_mixed);
- arr_mixed = 0;
- }
- }
- //function for test print
- void print_arr_map(struct Arr_map am[], int am_len)
- {
- for(int i = 0; i < am_len; i++){
- printf("am[%d] size %d: ", i, am[i].array_size);
- for(int j = 0; j < am[i].array_size; j++){
- printf("%2d ", am[i].array_n[j]);
- }
- printf("\n");
- }
- }
- void find_mixed(struct Arr_map am[], int am_len)
- {
- print_arr_map(am, am_len);
- arr_mixed_init(&am[0]);
- for(int i = 1; i < am_len; i++){
- int count = 0;
- for(int j = 0; arr_mixed[j] != NON_EXIST; j++){
- for(int k = 0; k < am[i].array_size; k++){
- if(arr_mixed[j] == am[i].array_n[k]){
- arr_mixed[count++] = arr_mixed[j];
- break;
- }
-
- }
- }
- arr_mixed[count] = NON_EXIST;
- }
- }
- int main()
- {
- find_mixed(array_size_map, sizeof(array_size_map)/sizeof(array_size_map[0]));
- printf("\nmixed foud: ------------>\n");
- for(int i = 0; arr_mixed[i] != NON_EXIST; i++){
- printf("arr_mixed[%d]: %d\n", i, arr_mixed[i]);
- }
- arr_mixed_destroy();
- }
复制代码 |
|