杭电1412

题意:给你两个集合,要求{A} + {B}.注:同一个集合中不会有两个相同的元素。

Analyse:
用a[],b[]数组存放两集合的元素,然后分别升序排序,方便比较和输出。
输出的大致方法:j从0开始递增,输出所有小于b[j]的a[i],若b[j]不等于a[i],再输出b[j],继续循环直到B的元素输出完毕。最后对于可能剩余的A的元素依次输出。
View Code
 1 #include<stdio.h>
2 main()
3 {
4 int a[10000],b[10000];
5 int i,j,FLAG;
6 int m,n;
7 int min,temp;
8 while(scanf("%d%d",&n,&m)==2)
9 {
10 for(i=0;i<n;i++)
11 scanf("%d",&a[i]);
12 for(i=0;i<m;i++)
13 scanf("%d",&b[i]);
14 for(i=0;i<n-1;i++)
15 {
16 min=i;
17 for(j=i+1;j<n;j++)
18 {
19 if(a[min]>a[j])
20 min=j;
21 }
22 temp=a[min];
23 a[min]=a[i];
24 a[i]=temp;
25 }
26 for(i=0;i<m-1;i++)
27 {
28 min=i;
29 for(j=i+1;j<m;j++)
30 {
31 if(b[min]>b[j])
32 min=j;
33 }
34 temp=b[min];
35 b[min]=b[i];
36 b[i]=temp;
37 }
38 FLAG=0;
39 for(j=0,i=0;j<m;j++)
40 {
41 for(;i<n;i++)
42 {
43 if(a[i]<b[j])
44 {
45 printf(FLAG?" %d":"%d",a[i]);
46 FLAG=1;
47 }
48 else
49 break;
50 }
51 if(b[j]!=a[i==n?n-1:i])
52 {
53 printf(FLAG?" %d":"%d",b[j]);
54 FLAG=1;
55 }
56 }
57 for(;i<n;i++)
58 {
59 printf(FLAG?" %d":"%d",a[i]);
60 FLAG=1;
61 }
62 printf("\n");
63 }
64 }
原文地址:https://www.cnblogs.com/ZShogg/p/2416632.html