0

我有这个代码......对于一个函数,它从用户那里获取 7 个数字并将其放入数组 1 中......然后创建一个随机数并将它们放入数组 2 中......检查是否有共同值...(不仅在同一个地方,例如:不仅如果 ar1[1]==ar2[1] ...而且检查所有地方是否存在共同值)...。将不同的值放在第三个数组中...创建第三个数组并将不常见的值放入其中...这是我的代码:

 //includes
# include  <stdio.h>
# include  <conio.h>
# include  <stdlib.h>
# include  <time.h>

//define
#define N 7
//prototype
void randomArray(int maxVal,int ar2[]);

int main()
{
//variables/arrays
int ar1[N],ar2[N],ar3[N],i,z,t,temp,maxVal,counter;

printf("Please Enter %d numbers: ",N);
for(i=0;i<7;i++)
{
    scanf("%d",&ar1[i]);
}

while(1)
{
printf("Please enter a max value: ");
scanf("%d",&maxVal);

if(maxVal>0)
    break;
}
randomArray(maxVal,ar2);


getch();
return 0;
}

//randomArray
void randomArray(int maxVal,int ar2[])
{
    int i;
    for(i=0;i<N;i++)
    {
     /* get random value between minVal and maxVal */
        ar2[i] = (rand() % (maxVal+1 - 1)) + 1;
    }
}
4

1 回答 1

1

这是简单的蛮力方法。它首先将数组 1 中的每个元素与数组 2 中的每个元素进行比较,如果它不在数组 2 中,则将其存储。然后它对数组 2 执行相同的操作。然后它打印数组 3。

注意:如果没有匹配项,您需要将数组 3 的大小更改为 N*2。此外,首先将数组 3 中的所有元素设置为 0 以标记为非结果。或者跟踪数组 3 的长度。

int ar3[N*2] = {0};
int index = 0;
//Check 1st array
printf("Array 1:\t");
for (int i = 0; i < N; i++) {
    bool in_array = false;
    for (int k = 0; k < N; k++) {
        if (ar1[i] == ar2[k]) {
            in_array = true;
                    break;
        }
    }
    if (!in_array) {
        ar3[index++] = ar1[i];
    }
    printf(" %d", ar1[i]);
}
//Check 2nd array
printf("\r\nArray 2:\t");
for (int i = 0; i < N; i++) {
    bool in_array = false;
    for (int k = 0; k < N; k++) {
        if (ar2[i] == ar1[k]) {
            in_array = true;
                    break;
        }
    }
    if (!in_array) {
        ar3[index++] = ar2[i];
    }
    printf(" %d", ar2[i]);
}

// Print result
printf("\r\nUnique:\t");
for (int i = 0, j = 0; i < N*2; i++) {
    if (0 == ar3[i]) {
        break;
    }
    printf(" %d", ar3[i]);
}

如果这对您有用,请接受正确答案。

于 2012-12-11T13:37:01.030 回答