在阵列中搜索重复的值(Searching for duplicate values in an ar

2019-09-22 10:20发布

我很新的C,我希望为一些指针。 我试图把数组的7个整数的输入,并通过他们寻找,看是否有数字只出现一次。 这是我到目前为止有:

#define size 7
int main(void)
{
int array[size], target, i, prev, count;
//Initialize the array
printf("Please enter %d integers", size);
scanf("%d", &target);
prev = array[0];
count = 1;

for(i = 0; i<size; i++)
{
scanf("%d", &array[i]);
...

我知道这是相当可怕,但C是完全陌生的我。 我想通了,输入该用户的7个整数,但我已经不是第线索从哪里开始尝试索引他们如何。 我也意识到,有更先进的方式来弄清楚; 然而,我试图找到使用一个业余爱好者能理解基本概念的解决方案。

Answer 1:

这可以为O(n ^ 2)算法来进行:

int yes = 1, i, j;
for (i = 0; i < n; ++i)
{
   for (j = i + 1; j < n; ++j) if (arr[i] == arr[j])
   {
       printf("Found a duplicate of %d\n", arr[i]);
       yes = 0;
       break;
   }
   if (!yes) break;
}
if (yes) printf("No duplicates");


Answer 2:

搜索重复(虽然不是最有效的一个)最简单的方法是对数组进行排序。 您可以使用内置的qsort功能,例如:

int compare (const void * a, const void * b)
{
  return ( *(int*)a - *(int*)b );
}

/* ... */

qsort (array, size, sizeof(int), compare);

int seen = 0;
for (int i = 1; i < size; ++i) {
  if (array[i] == array[i - 1]) {
    if (!seen) {
      printf("%d\n", array[i]);
      seen = 1;
    }
  } else {
    seen = 0;
  }
}


Answer 3:

我知道3种方法来找到重复,2已经回答了,所以这里是第三(简体) -

复杂性O(N)时间,O(M)存储器。

如果数字一些范围内等0 - MM相当于N元件的数量,可以使用尺寸的阵列M+1 ,以检查是否数量已经出现之前。

代码 -

int exists[M+1]; //set M to appropriate value
memset(exists, 0, sizeof(exists)); //set all 0 
for (i = 0; i < N; i++)
{
  if (exists[array[i]])
  {
    printf("Duplicate found\n");
    break; //or something else
  }
  exists[array[i]] = 1;
}

注意-不要忘了,输入元素应该是正整数,不大于M



Answer 4:

这一个是在颈部阅读有点痛,所以我解释什么,我做了一点点的位置:

首先,包含标准I / O库,#定义数组大小,以任何你想要的,你声明数组(我打电话给我:INT项[SIZE])。

后的第一个for循环“中输入10个数字”是主要原因之一,它允许你在10号推入阵列。

如果语句是应用到之后输入的输入值如下测试:

1)第一if语句确保我们进入适当范围内的值。

2)以下“否则,如果”显示,因为没有什么比较它如果条目[i] =条目[0](这意味着如果这是数组中的第一个对象),我们不要做任何事情。

3)最后的“其他”包含嵌套循环。 外环被初始化为1,所以我们确保在发生在内环的比较,我们一直在与先前的相比当前值。

我希望这可以帮助...干杯:)

* /

#include <stdio.h>

#define SIZE 10

//declarations
int entries[SIZE];

int main(void)
{
    printf("Enter 10 numbers:\n");

    for(int i = 0; i <= SIZE-1; i++)
    {
        printf("[%d]:\n", i);
        scanf("%d", &entries[i]);

        if(entries[i] < 10 || entries[i] > 100) {
            printf("Please enter valid number (between 10 and 100)\n");
            scanf("%d", &entries[i]);
        }
        else if(i == 0) {
            ;
        } else
        {
            for(int j = 1; j <= i; j++)
            {
                *//internal loop goes through all the previous entries (entries[i-1], entries[i-2], etc)*
                for(int k = 0; k < j; k++) {
                    if(entries[j] == entries[k])
                        printf("%d is a duplicate value\n", entries[i]);
                }
            }
        }
    }


}


文章来源: Searching for duplicate values in an array