1.合並兩個數組,並保持仍然有序。2.刪除合並后數組中的重復元素


 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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM