Поиск дубликатов с указателями - PullRequest
0 голосов
/ 05 марта 2019
#include <stdio.h>
#include<stdlib.h>

int main()
{
    int *num=malloc(sizeof(int)*10);
    int n,dup=0;
    printf("Enter number of elements");
    scanf("%d",&n);
    printf("Enter numbers");
    for(int i=0;i<n;i++)
    {
            scanf("%d",num+i);

    }

    for(int i=0;i<n;i++)
    {
        for(int j=1;j<n;j++)
        {
            if(*(num+i)==*(num+j))
            {
                    dup++;
            }

         }
         }

    printf("%d",dup);
    free(num);

    return 0;
}

Я пытаюсь определить, сколько раз элемент повторяется, используя указатели. Но я не получаю правильный вывод. Что не так с этим кодом? Изменить: для входов 1,2,3 я получаю вывод 2.

Ответы [ 2 ]

2 голосов
/ 05 марта 2019

Внутренний цикл неправильный и повторяющиеся пары

for(int j = 1; j < n; j++)

меняют его на

for(int j = i + 1; j < n; j++)

Вам также следует переместить линию malloc дальше вниз и основать ее на входе;

int *num = malloc(sizeof(int) * n);
1 голос
/ 05 марта 2019

Если i и j одинаковы, вы всегда получите совпадение.Вы также получите дубликаты совпадений, если, например, элементы 2 и 3 совпадают, потому что вы проверяете 2 против 3 и 3 против 2. Чтобы поймать это, начните j с одного больше, чем i вместо 1. Кроме того, вы будетехотите вырваться из внутреннего цикла, когда найдете дубликат, чтобы при наличии нескольких экземпляров их не считали более одного раза.

for(int i=0;i<n;i++)
{
    for(int j=i+1;j<n;j++)
    {
        if (*(num+i)==*(num+j))
        {
                dup++;
                break;
        }
     }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...