【问题描述】
从标准输入中输入两组整数(每行不超过20个整数,每组整数中元素有可能重复)。合并两组整数,去掉在两组整数中都出现的整数,并按从大到小顺序排序输出(即两组整数集“异或”),重复整数只输出一次。
【输入形式】
首先输入第一组整数的个数,然后在下一行输入第一组整数,以一个空格分隔各个整数;然后同样的方式输入第二组整数。
【输出形式】
先按从大到小顺序排序输出合并后的整数集(去掉在两组整数中都出现的整数,以一个空格分隔各个整数)。
【样例输入】
9
5 1 4 32 872 9 -6 32 872
10
1 5 2 87 10 1 9 5 1 10
【样例输出】
872 87 32 10 4 2 -6
【样例说明】
第一组整数9个,分别为5 1 4 32 872 9 -6 32 872,第二组整数10个,分别为1 5 2 87 10 1 9 5 1 10。将第一组和第二组整数合并(去掉在两组整数中都出现的整数5、1、9),并从大到小顺序排序后结果为-872 87 32 10 4 2 -6。重复的32、872、10只输出一次
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j,j1=0,j2=0,k1=0,k2=0,tmp,flag=0;
char a=0;
int ii = 0;
scanf("%d", &ii);
int num1[ii];
while(a!= '\n') {
scanf("%d",&num1[j1++]);
a= getchar();
}
a=0;
int iii = 0;
scanf("%d", &iii);
int num2[ii];
while(a != '\n'){
scanf("%d", &num2[j2++]);
a= getchar();
}
int num3[iii + ii], num4[iii + ii];
for (i = 0; i <j1; i++) {
for (j = 0; j<j2; j++) {
if (num1[i] == num2[j]) {
flag=1;
}
}
if(flag){
num3[k1++]=num1[i];
}else{
num4[k2++]=num1[i];
}
flag=0;
}
for (i = 0; i <j2; i++) {
for (j = 0; j <j1; j++) {
if (num2[i] == num1[j]) {
flag=1;
}
}
if(!flag){
num4[k2++]=num2[i];
}
flag=0;
}
for (i = 0; i < (k2-1); i++) {
for (j = i+1;j < k2; j++) {
if (num4[i] > num4[j]) {
tmp = num4[i];
num4[i] = num4[j];
num4[j] = tmp;
}
}
}
for (i = 0; i < (k2-1); i++) {
for (j = i+1;j < k2; j++) {
if (num4[i] < num4[j]) {
tmp = num4[i];
num4[i] = num4[j];
num4[j] = tmp;
}
}
}
for (i = 0; i < k2 -1; i++) {
if(num4[i] != num4[i+1]){
printf("%d ", num4[i]);
}
}
printf("%d ", num4[k2 -1]);
printf ("\n");
return 0;
}
好久不写C代码了,这次因为一个女孩的请求,马马虎虎地写了这样的代码。最后希望她称为我的女朋友啊!