我对C非常了解。目前,我正在编写一个程序,该程序应显示数组中的重复项。程序从用户读取N个数字(但N 我的代码可以工作,但是显示有问题。
例如,当它是5个elenets数组numb [5] = {1,2,2,2,3}时,程序显示2次3次,应该显示2次。

#include <stdio.h>
    int main ()
    {
        int n, i, j, numbers[100]={0};
        printf("number of elements (max 100):");
        scanf("%i", &n);
        printf("enter elements:");

        for (i = 0; i < n; i++)
        {
           scanf("%i", &numbers[i]);
        }
        for (i = 0; i < n; i++)
        {
           for j = i+1; j < n; j++)
           {
               if (numbers[i] ==numbers[j])
               {
                  printf("duplicates:%i\n", numbers[i]);
               }
           }
        }
     }

最佳答案

一旦numbers[i] ==numbers[j]为true,您需要删除重复项(移位)或其他一些不再打印重复项的方法。因此,为此编写逻辑。

这是我在您的代码中所做的编辑:

#include <stdio.h>
int main ()
{
        int n, i, j,k, numbers[100]={0};
        printf("number of elements (max 100):");
        scanf("%i", &n);
        printf("enter elements:");

        for (i = 0; i < n; i++)
        {
                scanf("%i", &numbers[i]);
        }
        for (i = 0; i < n; i++)
        {
                for (j = i+1; j < n; j++)
                {
                        if (numbers[j] ==numbers[j+1])//once true shift all elements by once
                        {
                                for(k=j; k<n; k++)//loop for shifting elemenst
                                        numbers[k]=numbers[k+1];
                                j--;//again starts comparing from previous position
                                n--;// no of elements reduced
                        }
                }
        }
        for(i=0; i<n ;i++)
                printf("%d \n",numbers[i]);
   return 0;
}


希望对您有所帮助。

关于c - 在数组中查找重复项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47600919/

10-16 14:20