复制
收藏
提问
简洁
请编写函数fun, 函数的功能是: 删去一维数组中所有相同的数, 使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 例如, 一维数组中的数据是: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。
4月前
全网
文档
学术
百科
知识库
回答简洁模式
深入研究一些
为了实现题目要求的功能,我们可以编写一个名为 fun
的函数,该函数接收一个已经排序的一维数组作为输入,并返回删除所有重复数字后数组中剩余元素的个数。以下是实现该功能的步骤和代码示例:
-
初始化两个指针,一个用于遍历数组(我们称之为
i
),另一个用于记录新数组的最后一个元素的位置(我们称之为j
)。 -
从数组的第二个元素开始遍历,比较当前元素和前一个元素。
-
如果当前元素与前一个元素不同,说明我们找到了一个新的不同数字,将其移动到新数组的位置(由
j
指针指示),并将j
指针向前移动一位。 -
继续遍历直到数组的末尾。
-
返回
j
指针的位置,即删除重复数字后数组中剩余元素的个数。
以下是具体的代码实现:
#include <stdio.h>
int fun(int arr[], int n) {
if (n == 0) return 0;
int j = 0; // 初始化新数组的最后一个元素的位置
for (int i = 1; i < n; i++) {
if (arr[i] != arr[j]) {
j++; // 移动新数组的最后一个元素的位置
arr[j] = arr[i]; // 将当前元素移动到新数组
}
}
return j + 1; // j 是索引,所以需要加1来获取元素个数
}
int main() {
int arr[] = {2, 2, 2, 3, 4, 4, 5, 6, 6, 6, 6, 7, 7, 8, 9, 9, 10, 10, 10};
int n = sizeof(arr) / sizeof(arr[0]);
int new_size = fun(arr, n);
printf("删除重复数字后的数组内容是: ");
for (int i = 0; i < new_size; i++) {
printf("%d ", arr[i]);
}
return 0;
}
当运行上述代码时,输出将会是删除重复数字后的数组内容,即:
删除重复数字后的数组内容是:2 3 4 5 6 7 8 9 10
这个函数满足题目要求,能够从已排序的一维数组中删除所有重复的数字,只保留每个数字的一个副本,并返回删除后数组中剩余元素的个数。2345
你觉得结果怎么样?