не могу найти ошибку в программе, которая удалит повторяющиеся числа из массива - PullRequest
0 голосов
/ 08 февраля 2019

Постановка задачи: удалить повторяющееся число из массива и снова напечатать его. Мой подход 1. сравнить число со всеми остальными и найти дубликат. 2. отправить индекс дубликата в функцию delindex и сдвинуть все числа на единицу и уменьшить размер индекса на единицу.,Проблема в 18 не сдвигается.

#include<stdio.h>
int a[20]={11,12,13,15,12,14,16,17,11,12,14,15,18,12},i,j,index=13,x,y,p;
void delindex(int n)
{
    int i,j,ii;
    if(n==index)
    {
        index--;
    }
    else
    {   
        for(i=n;n<index;n++)
        {
            j=i+1;
            a[i]=a[j];
        }
    index--;            
    }
}
int main()
{
    int i;
    for(i=0;i<=index;i++)
    {
        printf("%d\t",a[i]);
    }
    printf("\n");
    for(x=0;x<index;x++)
    {
            for(y=x+1;y<=index;y++)
            {
                if(a[x]==a[y])
                {
                    delindex(y);
                }
            }
    }
    for(i=0;i<=index;i++)
    {
        printf("%d\t",a[i]);
    }   
    return 0;   
}

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

На самом деле ваш код работает нормально, просто позаботьтесь о некоторых вещах.Я перечислю их здесь.

  1. Не используйте 'index' в качестве имени переменной, это встроенная функция.
  2. Если переменная объявлена ​​глобально в Cвам не нужно объявлять это локально.Если вы делаете, локальное значение переменной только изменяется, глобальное значение остается неизменным.

Вы печатаете окончательный результат перед переводом новой строки, которая в сочетании с окончательным результатом delindex вводит вас в заблуждение.Я предоставил обновленную версию кода:

#include<stdio.h>
int a[20]={11,12,13,15,12,14,16,17,11,12,14,15,18,12},i,j,ind=13,x,y,p;
void delindex(int n)
{
    int i,j,ii;
    if(n==ind)
    {
        ind--;
    }
    else
    {   
        for(i=n;n<ind;n++)
        {
            j=i+1;
            a[i]=a[j];
        }
        ind--;            
    }
    printf("\n");
    for(ii=0;ii<=ind;ii++)
    {
        printf("%d\t",a[ii]);
    }   
}
int main()
{
    int i;
    for(i=0;i<=ind;i++)
    {
        printf("%d\t",a[i]);
    }
    printf("\n");
    for(x=0;x<ind;x++)
    {
        for(y=x+1;y<=ind;y++)
        {
            if(a[x]==a[y])
            {
                delindex(y);
            }
        }
    }
    printf("\n\nFinal Result: \n");
    for(i=0;i<=ind;i++)
    {
        printf("%d\t",a[i]);
    }   
    return 0;   
}
0 голосов
/ 08 февраля 2019
  1. строка for(i=n;n<index;n++) в void delindex(int n) должна быть for (int i = n; i < index; ++i)
  2. строка
for(y=x+1;y<=index;y++)
{
    if(a[x]==a[y])
    {
        delindex(y);
    }
}

должна быть

for(y=x+1;y<=index;)
{
    if(a[x]==a[y])
    {
        delindex(y);
    } else {
        ++y;
    }
}

для a[] = {1, 2, 1, 1} до того, как код будет {1, 2, 1}

может работать следующее code:

#include <stdio.h>

int a[] = {11, 12, 13, 15, 12, 14, 16, 17, 11, 12, 14, 15, 18, 12};
int index = sizeof(a) / sizeof(a[0]) - 1;

void delindex(int n) {
  if (n == index) {
    --index;
  } else {
    for (int i = n; i < index; ++i) a[i] = a[i + 1];
    index--;
  }
}

int main() {
  printf("before remove duplicate\n");
  for (int i = 0; i <= index; ++i) printf("%d\t", a[i]);
  printf("\n");
  for (int x = 0; x < index; ++x)
    for (int y = x + 1; y <= index;)
      if (a[x] == a[y])
        delindex(y);
      else
        ++y;
  printf("after remove duplicate\n");
  for (int i = 0; i <= index; ++i) printf("%d\t", a[i]);
  printf("\n");
  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...