1 #include <stdio.h> 2 /* 3 題目:1.合並兩個有序數組到第三個中去,並使其依然保持有序 2.刪除重復的元素 4 思路:a.分別測出二個數組的長度,將兩個數組的長度之和作為第三個數組的長度 5 b.比較二個數組元素的大小,小的放入第三個數組,直至某一個數組為空,將另外一個不為空的數組剩下的元素追加到第三個數組 6 后面即可 7 c.刪除重復的元素。另外定義一個數組,長度<=當前數組,但是不知道具體有幾個重復的元素,所以長度設置成原數組的長度。 8 d.原數組的第一個元素不用比較,直接放進第二個數組中的第一個元素中。原數組的第二個元素和第一個元素如果相同,不用放入第二個數組 9 如果不同放入第二個數組 10 */ 11 #define M 4 12 #define N 6 13 int main(void) 14 { 15 int a[M] = {1,2,3,4}; 16 int b[N] = {2,3,5,6,7,8}; 17 18 int c[M+N],i,j,k; 19 i = j = k = 0; 20 21 while(i<M&&j<N)//如果一個數組為空就退出循環 22 { 23 if(a[i]<=b[j]) 24 c[k++] = a[i++]; 25 else 26 c[k++] = b[j++]; 27 } 28 while(i<M)//a數組不為空 29 c[k++] = a[i++]; 30 while(j<N)//b數組不為空 31 c[k++] = b[j++]; 32 for(k = 0;k<M+N;k++) 33 { 34 printf("%d\t",c[k]); 35 } 36 putchar(10); 37 38 printf("--------------刪除重復的元素----------------\n"); 39 int d[M+N]; 40 41 d[0] = c[0];//第一個元素直接放入第二個數組 42 i = 1,j = 1; 43 while(i<M+N) 44 { 45 if(c[i] != c[i-1]) 46 { 47 d[j++] = c[i];//如果不同放入第二個數組。 48 } 49 i++; 50 } 51 52 for(i = 0;i<j;i++) 53 { 54 printf("%d\t",d[i]); 55 } 56 putchar(10); 57 return 0; 58 }