题目如下:
给你两个集合,要求{A} + {B}.
注:同一个集合中不会有两个相同的元素.Input:
每组输入数据分为三行,第一行有两个数字n,m(0<n,m<=10000),分别表示集合A和集合B的元素个数.后两行分别表示集合A和集合B.每个元素为不超出int范围的整数,每个元素之间有一个空格隔开.
Output:
针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开.
样例如下:
Sample Input 1 2 1 2 3 1 2 1 1 2sample output
1 2 3 1 2
按照题目,可以将过程大致分为五步:
1,取值;
2,用一个集合C表示A,B两个集合合并后的集合;
3,对集合C中元素进行排序;
4,除去集合C中的重复元素;
5,输出;
对于取值不多做介绍(scanf函数即可);
第二步,用一个集合表示A,B两个集合合并后的集合,可做以下操作:
for(i=0;i<n;i++)//n为A的元素个数
{
scanf("%d",A.a[i]);
sum[i]=A.a[i];
}
for(i=0;i<m;i++,k++)//m为B的元素个数
{
scanf("%d",A.b[i]);
sum[k]=A.b[i];
}
但可以看出用sum于两个循环中都有出现,不妨直接对sum进行赋值:
for(i=0;i<m+n;i++)
{
scanf("%d",&a[i]);
}
第三步:排序(快排,冒泡均可)
这里用的是冒泡
for(i=0;i<m+n-1;i++)
{
for(j=0;j<m+n-i-1;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
第四步;除去重复元素:
for(i=0;i<n+m;i++)//两个集合中每个元素出现次数最大为2;
{
if(a[i]==a[i+1])
{
a[i+1]=0;//将重复第二次的元素赋值为0;
}
}
第五步:输出
printf("%d",a[0]);
for(i=1;i<n+m;i++)
{
if(a[i]!=0)
{
printf(" %d",a[i]);//最后一个元素后无空格,所以可以先输出a[0],再在其他元素前添加空格
}
}
printf("\n");//注意最后要换行,否则会报各式错误;
以上就是完整过程啦,整个代码如下:
#include<stdio.h>
int main()
{
int i,j,n,m,t=0;
int a[20001];
while(scanf("%d %d",&n,&m)!= EOF)
{
for(i=0;i<m+n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<m+n-1;i++)
{
for(j=0;j<m+n-i-1;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(i=0;i<n+m;i++)
{
if(a[i]==a[i+1])
{
a[i+1]=0;
}
}
printf("%d",a[0]);
for(i=1;i<n+m;i++)
{
if(a[i]!=0)
{
printf(" %d",a[i]);
}
}
printf("\n");
}
}
这是一个关于如何合并两个集合并进行排序的编程问题。博客内容详细介绍了处理步骤,包括取值、合并集合、排序、去除重复元素以及输出结果。提供的代码示例使用了冒泡排序和简单的逻辑来实现这一功能。
925

被折叠的 条评论
为什么被折叠?



