在查找两个输入数组的并集和交集的 C 程序中,我在交集部分遇到问题。问题是当我打印出交集数组 I[u + z]
时,输出只有一个重复的数字,而没有打印两个数组的其他交集。代码部分有问题出在代码末尾。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, z, f ;
printf("Enter size of array\n");
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 array\n");
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]);
关于c - 在查找两个输入数组的并集和交集的 C 程序中,我在交集部分遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58649171/