如题所述
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
const int M = 5;
const int N = 6;
void intersect(int a[], int b[]) {
if ((a[M - 1] < b[0]) || (a[0] > b[N - 1])) return;
int n = M < N ? M: N;
int *p = (int*)malloc(sizeof(int)*n);
memset(p, 0, n);
int i = 0;
int j = 0;
int k = 0;
while (i < M && j < N) {
if (a[i] < b[j]) i++;
else if (a[i] > b[j]) j++;
else {
p[k] = a[i];
while (a[++i] == p[k]);
while (a[++j] == p[k]);
k++;
}
}
for (i = 0; i < k; i++)
printf("%d ", p[i]);
free(p);
}
int main() {
int a[M] = {1, 2, 2, 5, 7};
int b[N] = {2, 3, 4, 7, 8, 10};
intersect(a, b);
getchar();
return 0;
}
#include <stdlib.h>
#include <memory.h>
const int M = 5;
const int N = 6;
void intersect(int a[], int b[]) {
if ((a[M - 1] < b[0]) || (a[0] > b[N - 1])) return;
int n = M < N ? M: N;
int *p = (int*)malloc(sizeof(int)*n);
memset(p, 0, n);
int i = 0;
int j = 0;
int k = 0;
while (i < M && j < N) {
if (a[i] < b[j]) i++;
else if (a[i] > b[j]) j++;
else {
p[k] = a[i];
while (a[++i] == p[k]);
while (a[++j] == p[k]);
k++;
}
}
for (i = 0; i < k; i++)
printf("%d ", p[i]);
free(p);
}
int main() {
int a[M] = {1, 2, 2, 5, 7};
int b[N] = {2, 3, 4, 7, 8, 10};
intersect(a, b);
getchar();
return 0;
}
温馨提示:答案为网友推荐,仅供参考