【问题标题】:finding duplications in arrays在数组中查找重复项
【发布时间】:2018-05-16 00:04:55
【问题描述】:

我对 C 语言非常熟悉。目前我正在编写一个程序,它应该在数组中显示重复项。程序读取(来自用户)、N 个数字(但 N

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

【问题讨论】:

  • 听起来您需要跟踪已找到的重复项,如果它们在该列表中,则不要显示它们。 我的显示器有问题。例如,... 如果您有任何其他问题,则需要具体说明。人们不会审查您的代码并试图找出您可能遇到的任何其他问题。您需要完成这项工作并提出一个具体问题。
  • 这是唯一的问题,例如,这就像“例如对于这个数组,其中一些数字超过两倍”。但无论如何谢谢你的回答!

标签: c arrays duplicates


【解决方案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;
}

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2018-09-05
    • 2021-12-10
    • 2019-01-02
    • 2019-09-10
    相关资源
    最近更新 更多