复制
收藏
提问
简洁

请编写函数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 的函数,该函数接收一个已经排序的一维数组作为输入,并返回删除所有重复数字后数组中剩余元素的个数。以下是实现该功能的步骤和代码示例:

  1. 初始化两个指针,一个用于遍历数组(我们称之为 i),另一个用于记录新数组的最后一个元素的位置(我们称之为 j)。

  2. 从数组的第二个元素开始遍历,比较当前元素和前一个元素。

  3. 如果当前元素与前一个元素不同,说明我们找到了一个新的不同数字,将其移动到新数组的位置(由 j 指针指示),并将 j 指针向前移动一位。

  4. 继续遍历直到数组的末尾。

  5. 返回 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

你觉得结果怎么样?

以上内容由AI搜集生成,仅供参考

在线客服