【发布时间】:2021-02-20 17:57:30
【问题描述】:
我对编程很陌生,我编写了一个代码来从数组中删除重复项,从逻辑上讲,它应该可以工作,但它没有......我在逻辑上对其进行了多次测试,这很有意义......
代码如下:
#include <stdio.h>
int rmDuplicates(int arr[], int n)
{
int i, j;
for (i = 0; i < n; i++) {
if (arr[i] == arr[i + 1]) {
for (j = i + 1; j < n - 1; j++) {
arr[j] = arr[j + 1];
}
n--;
}
return n;
}
}
int main()
{
int n, i;
scanf("%d", &n);
int arr[n];
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
n = rmDuplicates(arr, n);
for (i = 0; i < n; i++) {
printf("%d", arr[i]);
}
printf("\n%d", n);
return 0;
}
【问题讨论】:
-
如果你的输入是 1 2 3 4 1 你的输出应该是 1 2 3 4 但你的代码会输出 1 2 3 4 1
-
只有在重复项是连续的情况下才会删除它们(因为
if(arr[i] == arr[i+1])测试);你可以接受吗? -
你只检查连续的数字,所以如果重复不连续,它就不起作用,在第一个循环中应该检查所有其他元素的第 0 个元素,然后重复该过程直到结束。
-
'arr[i+1]' 当 i 等于 n-1 时 OOB 访问。
标签: arrays c data-structures duplicates