在数组

时间:2017-12-01 20:20:04

标签: c arrays duplicates

我对C非常新鲜。目前我正在编写一个应该在数组中显示重复项的程序。程序读取(来自用户),N个数字(但是N <100),之后显示重复的数字。 我的代码工作,但我有显示问题。 例如,当它是5 elenets array numb [5] = {1,2,2,2,3}时,程序显示2三次,它应该显示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]);
               }
           }
        }
     }

1 个答案:

答案 0 :(得分:1)

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

这是我的代码编辑:

#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;
}

我希望它有所帮助。