给定两个整型数组,本题要求找出不是两者共有的元素。
输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数N(≤),随后是N个整数,其间以空格分隔。
输出格式:
在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。
输入样例:
10 3 -5 2 8 0 3 5 -15 9 100
11 6 4 8 2 6 -5 9 0 100 8 1
输出样例:
3 5 -15 6 4 1
1 #include <stdio.h> 2 int main() 3 { 4 int one[30] = { 0 }; 5 int two[30] = { 0 }; 6 int three[30] = { 12 }; 7 int N,M,i,j,h,k=0; 8 scanf("%d", &N); 9 for (i = 0; i < N; i++) { 10 scanf("%d", &one[i]); 11 } 12 scanf("%d", &M); 13 for (j = 0; j < M; j++) { 14 scanf("%d", &two[j]); 15 } 16 int cnt = 0; 17 for (i = 0; i < N; i++) { 18 cnt = 0; 19 for (j = 0; j < M; j++) { 20 if (one[i] == two[j]) { 21 cnt = 1; 22 break; 23 } 24 } 25 if (cnt == 0) { 26 for (h = 0; h < k+1; h++) { 27 if (three[h] == one[i]&&three[h]!=0) { 28 cnt = 1; 29 } 30 } 31 if (cnt == 0) { 32 three[k] = one[i]; 33 k++; 34 } 35 } 36 } 37 for (j = 0; j < M; j++) { 38 cnt = 0; 39 for (i = 0; i < N; i++) { 40 if (two[j] == one[i]) { 41 cnt = 1; 42 break; 43 } 44 } 45 if (cnt == 0) { 46 for (h = 0; h < k + 1; h++) { 47 if (three[h] == two[j]&&three[h] != 0) { 48 cnt = 1; 49 } 50 } 51 if (cnt == 0) { 52 three[k] = two[j]; 53 k++; 54 } 55 } 56 } 57 for (h = 0; h < k - 1; h++) { 58 printf("%d ", three[h]); 59 } 60 printf("%d", three[h]); 61 return 0; 62 63 }
第一次忽略了输出的数有0的情况,其与数组初始化为0冲突,改进了这行代码后能解决当three[h]等于零时造成的错误答案。
原文地址:https://www.cnblogs.com/nekonekomiao/p/11617486.html
时间: 2024-10-25 19:44:43