2013-04-12 25 views
-3

我有一個2d的整數表(全部爲正數),並且想要創建一個只有每個整數都有一個整數的整數表(無重複數字)。 2-d行已經排序。在c中有整數的表的聯合合併

實施例:

2-d表

15 20 40 69 74 83 

12 40 58 74 82 94 111 

19 30 69 

12 19 

44 64 74 83 

答案: 1-d表:

12, 15, 19, 20, 30, 40, 44, 58, 64, 69, 74, 82, 83, 94, 111 
+3

不錯的任務。也許你會有興趣向我們展示你到目前爲止的代碼以及運行它時遇到的確切問題。 – 2013-04-12 10:17:44

回答

0

另一種方式

#include <stdio.h> 
#include <stdlib.h> 

int* merge(int* array1, int* array2){ 
    int *result = NULL; 
    int size=0; 

    result = (int*)malloc(sizeof(int)*48);//need capacity check! 
    while(*array1 || *array2){ 
     if(*array1 && *array2){ 
      if(*array1 < *array2){ 
       result[size++]=*array1++; 
       continue; 
      } 
      if(*array1 > *array2){ 
       result[size++]=*array2++; 
       continue; 
      } 
      if(*array1 == *array2){ 
       result[size++]=*array1++; 
       array2++; 
       continue; 
      } 
     } 
     if(*array1){ 
      while(*array1) 
       result[size++]=*array1++; 
     } 
     if(*array2){ 
      while(*array2) 
       result[size++]=*array2++; 
     } 
    } 
    result[size++]=0; 
    result = realloc(result, sizeof(int)*size); 
    return result; 
} 

int main() { 
    int subtable1[] = {15, 20, 40, 69, 74, 83, 0}; 
    int subtable2[] = {12, 40, 58, 74, 82, 94, 111, 0}; 
    int subtable3[] = {19, 30, 69, 0}; 
    int subtable4[] = {12, 19, 0}; 
    int subtable5[] = {44, 64, 74, 83, 0}; 
// int *table[] = { subtable1, subtable2, subtable3, subtable4, subtable5 }; 
    int *m12, *m34, *m1234, *result; 
    int counter=0; 

    m12=merge(subtable1, subtable2); 
    m34=merge(subtable3, subtable4); 
    m1234=merge(m12, m34); 
    result=merge(m1234, subtable5); 
    //check print 
    for(counter=0;result[counter];++counter) 
     printf("%d ", result[counter]); 
    printf("\n"); 
    //need free 
    return 0; 
} 
+0

通過表格大小自動合併,這樣會更好。 – BLUEPIXY

1
#include <stdio.h> 

int main() { 
    int subtable1[] = {15, 20, 40, 69, 74, 83, 0}; 
    int subtable2[] = {12, 40, 58, 74, 82, 94, 111, 0}; 
    int subtable3[] = {19, 30, 69, 0}; 
    int subtable4[] = {12, 19, 0}; 
    int subtable5[] = {44, 64, 74, 83, 0}; 
    int *table[] = { subtable1, subtable2, subtable3, subtable4, subtable5}; 
    int result[128] = {0}; 
    int temp[128] = {0}; 
    int i,j, count=0; 

    for(i=0;i<sizeof(table)/sizeof(int*);++i) 
     for(j=0;table[i][j];++j) 
      ++temp[table[i][j]]; 

    for(i=1;i<128;++i) 
     if(temp[i]) 
      result[count++]=i; 
    //check print 
    for(i=0;i<count;++i) 
     printf("%d ", result[i]); 
    printf("\n"); 

    return 0; 
} 
+0

感謝您的快速響應。但是,程序如何能像獲取2-d表的函數一樣,並返回一個沒有重複數字排序的1-d表?合併(表[k] [n],結果[n]) – user2271058

+0

@ user2271058我只是爲了確認存在,而不是此程序正在進行合併。此外,還有一個範圍(0 <數據<128)可以應用。我認爲它不會像你一樣形成和運作,但是浪費很多。 – BLUEPIXY