在寻找两个输入数组并集和交集的C程序中,我在交集部分遇到了一个问题



在查找两个输入数组的并集和交集的C程序中,我在交集部分遇到了问题。问题是,当我打印出交集数组I[u + z]时,输出仅重复一个数字,而不打印两个数组的其他交集代码中有问题的部分在代码的末尾

#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, z, f ;
printf("Enter size of arrayn");
scanf("%d", &n);
int a[n];
if(n <= 20) {
for(int i = 0 ; i < n; i++) {
printf("Enter integer n");
scanf("%d", &a[i]);
}
}
for(int i = 0 ; i < n; i++) {
printf("%d " ,a[i]);
}
printf("nEnter size of the 2nd arrayn");
scanf("%d", &z);
int b[z];
if(z <= 20 ){
for(int i = 0 ; i < z; i++) {
printf("Enter integer n");
scanf("%d", &b[i]);
}
}
for(int i = 0 ; i < z; i++) {
printf("%d " ,b[i]);
}
for(int i = 0 ; i < n; i++) {
for(int j = i + 1; j < n; j++) {
if(a[i] == a[j]) {
for(int l = j; l < n; l++)
{
a[l] = a[l + 1];
}
n--;
j--;
}
}
}
printf("nArray1: ");
for(int i = 0 ; i < n; i++) {
printf("%d ", a[i]);
}
for(int t = 0; t < z; t++) {
for(int u = t + 1; u < z; u++) {
if(b[t] == b[u]) {
for(int l = u; l < z; l++)
{
b[l] = b[l + 1];
}
z--;
u--;
}
}
}
printf("nArray2: ");
for(int e = 0; e < z; e++) {
printf("%d ", b[e]);
}
int u[n + z] ; //union
for(int i = 0; i < n; i++) {
u[i] = a[i];
}
for(int i = n ; i < n + z; i++) {
u[i] = b[i - n];
}
for(int i = n ; i < n + z; i++) { //remove repeated values from union
for(int j = i + 1; j < n + z; j++) {
if(u[i] == u[j]) {
for(int l = j; l < n + z; l++)
{
u[l] = u[l + 1];
}
n + z--;
j--;
}
}
}
printf("n union is ");
for(int i = n ; i < n + z; i++) {
printf("%d ",u[i]);
}
// to get intersection  
int I[n + z]; // to get intersection
for(int i = 0; i < n; i++) {
for(int j = 0; j < z; j++) {
if(a[i] == b[j]) {
for(int k = 0; k < n + z; k++) {
I[k] = a[i];
}
}
}
}
printf("n intersection is ");
for(int i = 0; i < n + z; i++) {
printf("%d ", I[i]);
}
return 0;
}

当您发现相等时,应该只添加一个数字,而不是整个数组。

// to get intersection  
int I[n + z];
k = 0;
for(int i = 0; i < n; i++)
for(int j = 0; j < z; j++)
if(a[i] == b[j]) {
I[k++] = a[i];
break;
}
printf("n intersection is ");
for(int i = 0; i < k; i++)
printf("%d ", I[i]);
#include <stdio.h>
int main() {
int a, b, A[100], B[100], I[100], i, j, k = 0, l; /* i have also taken
intersection array. as I[100] */
printf("pls enter the a and b respectively ..n");
scanf("%d%d", & a, & b);
printf("pls enter the elements in An");
for (i = 0; i < a; i++) {
scanf("%d", & A[i]);
}
printf("pls enter the elements in Bn");
for (i = 0; i < b; i++) {
scanf("%d", & B[i]);
}
// intersection calculation
printf("intersection =");
printf("{");
for (i = 0, k = 0; i < a; i++) {
for (j = 0; j < b; j++) {
if (A[i] == B[j]) {
printf("%d,", A[i]);
I[k] = A[i];
k++;
}
}
}
printf("}n");
// lets find union
printf("union=");
printf("{");
for (i = 0; i < a; i++) {
for (j = 0, l = 0; j < k; j++) {
if (A[i] != I[j]) // this is A-B
{
l++;
if (l == (k)) {
printf("%d,", A[i]);
}
}
}
}
for (i = 0, k = 0; i < a; i++) {
for (j = 0; j < b; j++) {
if (A[i] == B[j]) {
printf("%d,", A[i]); // intersection
I[k] = A[i];
k++;
}
}
}
for (i = 0; i < b; i++) {
for (j = 0, l = 0; j < k; j++) {
if (B[i] != I[j]) {
l++;
if (l == (k)) {
printf("%d,", B[i]); //  this is B-A
}
}
}
}
printf("}n");
// union calculation ended here
printf("A-B = ");
printf("{");
for (i = 0; i < a; i++) {
for (j = 0, l = 0; j < k; j++) // A-B calculation
{
if (A[i] != I[j]) {
l++;
if (l == (k)) {
printf("%d,", A[i]);
}
}
}
}
printf("}n");
printf("B-A = "); // Calculates B-A
printf("{");
for (i = 0; i < b; i++) {
for (j = 0, l = 0; j < k; j++) {
if (B[i] != I[j]) {
l++;
if (l == (k)) {
printf("%d,", B[i]);
}
}
}
}
printf("}n");
return 0;
}

最新更新