8.5
输入两个整型数组(假设数组的大小为不超过10)的各个元素,输出不是两个数组共有的元素,并从小到大排序输出。
输入: 2个数组的元素(小于10个),数组中第一个数据指示元素的个数
输出:非共有的元素,从小到大排序
样例:
输入:
7 1 2 3 4 5 6 7
6 5 6 7 8 9 0
输出:
0 1 2 3 4 8 9
#include<stdio.h>
/*编这道题真的和打地鼠一样,此起彼伏的bug,how to solve this difficulty?可能是方法不太行*/
void bubblesort(int a[], int n);//函数原型
int main()
{
int a[10]; int b[10]; int c[20],d[20];
int n,k=0,i,j;
scanf("%d", &a[0]);
for (i = 1; i <=a[0]; i++)
scanf(" %d", &a[i]);
scanf("%d", &b[0]);
for(i=1;i<=b[0];i++)
scanf(" %d", &b[i]);//数组的输入
for (i = 1; i <= a[0]; i++)
c[i-1] = a[i];
for (i =1; i <=b[0]; i++)
c[i+a[0]-1] = b[i];//a、b两个数组合为一个数组c,可能是这一步的多余导致过程繁杂
for (i = 0; i < a[0] + b[0]; i++)//往下判断数组元素是否重复,并且将不重复项赋给数组d
{
int w = 0;//易漏
for (j = 0;j< a[0] + b[0]; j++)
{
if (c[i] == c[j])
w++;//巧妙的判断
}
if (w==1)//等号别漏
{
d[k] = c[i]; k++;//直接赋值,不用for循环,利用前面的for循环的余温
}
}
bubblesort(d, k);//函数引用
printf("%d", d[0]);
for(i=1;i<k;i++)
printf(" %d", d[i]);
system("pause");
return 0;
}
void bubblesort(int a[], int n)//定义冒泡排序函数,含指针
{
int i, j, h;
for (i = 0; i < n - 1; i++)//使下面的梳理顺序再次执行(最多只需执行n-1次,例如43210,经过5-1=4次梳理,可得01234)
{
for (j = 0; j < n - i - 1; j++)//单次梳理顺序,顺序排列(例如43210,经过1次梳理,可得32104)
{
if (a[j] > a[j + 1])//数值交换
{
h = a[j + 1]; a[j + 1] = a[j]; a[j] = h;
}
}
}
}