#include <stdio.h> int a[100]; int b[100]; int res[100]; /* 选择排序 */ void sortBySelect2(int *array,int len) { for(int i=0;i<len - 1;i++) { int t = 0; int tmp; for(int j=i;j<len;j++) { if(array[j] < array[i]) { t = j; tmp = array[i];//每次都得交换 array[i] = array[t]; array[t] = tmp; } } } } /* 错误的选择排序 */ void sortBySelect(int *array,int len) { for(int i=0;i<len - 1;i++) { int t = 0; int tmp; for(int j=i;j<len;j++) { if(array[j] < array[i]) t = j; } tmp = array[i]; array[i] = array[t]; array[t] = tmp; } } /* 两个元素中的相同元素被设置成 -1,由于集合中只有正数,没有负数 */ void reversDifference(int len1,int len2) { for(int i=0;i<len1;i++) { for(int j=0;j<len2;j++) { if(a[i] == b[j]) { a[i] = -1; b[j] = -1; } } } int k = 0; i = 0; for(i=0;i<len1;i++) { if(a[i] == -1) continue; res[k] = a[i]; k++; } for(i=0;i<len2;i++) { if(b[i] == -1) continue; res[k] = b[i]; k++; } if(k == 0) { printf("{}\n"); return; } sortBySelect2(res,k); printf("{"); for(i=0;i<k-1;i++) printf("%d,",res[i]); printf("%d}\n",res[i]); } /* 这种思路是找两个集合的不同元素,得找两次 所以的两次双重循环 */ void difference(int len1,int len2) { int k = 0; for(int i=0;i<len1;i++) { for(int j=0;j<len2;j++) { if(a[i] == b[j]) break; } if(j >= len2) { res[k] = a[i]; k++; } } for( i=0;i<len2;i++) { for(int j=0;j<len1;j++) { if(b[i] == a[j]) break; } if(j >= len1) { res[k] = b[i]; k++; } } for(int m=0;m<k;m++) printf("%d,",res[m]); printf("}\n"); } int main() { int time; freopen("in.txt","r",stdin); scanf("%d",&time); for(int i=0;i<time;i++) { int i = 0; while(scanf("%d",&a[i]),a[i]) i++; int j = 0; while(scanf("%d",&b[j]),b[j]) j++; //difference(i , j ); //注意此时的数组长度是i,j不用在减去1 reversDifference(i,j); } fclose(stdin); return 0; }