一个集合相加问题
Problem Description
给你两个集合,要求{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 2
Sample Output
1 2 3 1 2
最开始的思路是,将两个集合的元素合并起来,然后剔除掉相同的数据,然后再排序进行输出,便有了代码1.0
#include<stdio.h>
#include<string.h>
int main()
{
int a,b,C[20000];
while ((scanf("%d%d",&a,&b)) != EOF)
{
int i,j,t,k;
k = a+b;
for ( i = 0 ; i < k ; i++ )
{
scanf("%d",&C[i]);
}
int cnt = 0;
for ( i = 0 ; i < k-1-cnt ; i++ )
{
for ( j = i+1 ; j < k-cnt ; j++ )
{
if(C[i] == C[j])
{
for (t = i ; t < k-1 ; t++)
{
C[t] = C[t+1];
}
cnt++;
}
}
}
for ( i = 0 ; i < k-1-cnt ; i++ )
{
for ( j = i+1 ; j < k-cnt ; j++ )
{
if(C[i] > C[j])
{
t = C[i];
C[i] = C[j];
C[j] = t;
}
}
}
for ( i = 0 ; i < k-cnt ; i++ )
{
printf("%d ",C[i]);
}
printf("\n");
}
return 0;
}
但是进行多次WA后发现并不能很好的实现把重复元素从数组中剔除这一目的,一时间解题陷入
/**
* _ooOoo_
* o8888888o
* 88" . "88
* (| -_- |)
* O\ = /O
* ____/`---'\____
* .' \\| |// `.
* / \\||| : |||// \
* / _||||| -:- |||||- \
* | | \\\ - /// | |
* | \_| ''\---/'' | |
* \ .-\__ `-` ___/-. /
* ___`. .' /--.--\ `. . __
* ."" '< `.___\_<|>_/___.' >'"".
* | | : `- \`.;`\ _ /`;.`/ - ` : | |
* \ \ `-. \_ __\ /__ _/ .-` / /
* ======`-.____`-.___\_____/___.-`____.-'======
* `=---='
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 佛祖保佑 永无BUG
* 佛曰:
* 写字楼里写字间,写字间里程序员;
* 程序人员写程序,又拿程序换酒钱。
* 酒醒只在网上坐,酒醉还来网下眠;
* 酒醉酒醒日复日,网上网下年复年。
* 但愿老死电脑间,不愿鞠躬老板前;
* 奔驰宝马贵者趣,公交自行程序员。
* 别人笑我忒疯癫,我笑自己命太贱;
* 不见满街漂亮妹,哪个归得程序员?
*/
#include<stdio.h>
#include<string.h>
int main()
{
int a,b,C[20000];
while ((scanf("%d%d",&a,&b)) != EOF)
{
int i,j,t,k;
k = a+b;
for ( i = 0 ; i < k ; i++ )
{
scanf("%d",&C[i]);
}
for ( i = 0 ; i < k-1 ; i++ )//这里可以直接用sort进行排序
{
for ( j = i+1 ; j < k ; j++ )
{
if(C[i] > C[j])
{
t = C[i];
C[i] = C[j];
C[j] = t;
}
}
}
printf("%d",C[0]);
for ( i = 1 ; i < k ; i++ )
{
if ( C[i] != C[i-1] ) //如果当前数据和前一个数据相同就不输出
printf(" %d",C[i]);
}
printf("\n");
}
return 0;
}
这样一来便可以轻松AC,由此看来,并不是所有题目都非要按照题面的要求来严格执行,有时候还是可以投机取巧的