首页 > 解决方案 > 在程序中找不到将从数组中删除重复数字的错误

问题描述

问题陈述:从数组中删除重复的数字并再次打印我的方法是 1. 将数字与所有其他数字进行比较并找到重复的 2. 将重复的索引发送到函数 delindex 并将所有数字移动 1 并将索引大小减 1。问题是 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;   
}

标签: carrays

解决方案


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

推荐阅读