用c语言编写函数fun,函数的功能是:删去一组数组中所有相同的数,使之只剩一个。数组中的数已按从小到大的顺序排列,函数返回删除后数组的个数
时间: 2023-09-05 13:04:40 浏览: 292
### 回答1:
好的,这个问题可以回答。以下是C语言函数fun的代码实现:
```c
int fun(int arr[], int n) {
int i, j;
if (n == 0) {
return 0;
}
j = 0;
for (i = 1; i < n; i++) {
if (arr[i] != arr[j]) {
arr[++j] = arr[i];
}
}
return j + 1;
}
```
该函数通过遍历数组,判断当前元素与前一个元素是否相同,如果不同就将其保留下来,否则就跳过。最后返回保留下来的元素个数(也就是删除后的数组个数)。
### 回答2:
函数fun的实现如下所示:
```c
int fun(int arr[], int n)
{
if (n <= 1) {
return n;
}
int i, j;
j = 0; // 新数组的下标
for (i = 1; i < n; i++) {
if (arr[i] != arr[j]) {
arr[++j] = arr[i]; // 将不相同的数存入新数组
}
}
return j + 1; // 返回新数组的长度
}
```
函数接受一个已按从小到大顺序排列的整数数组arr,以及数组的长度n。函数的目标是将数组中所有重复的数删除,只保留一个,并返回删除后数组的长度。
函数中使用了两个指针:i用于遍历原数组arr,j用于记录新数组的下标。初始时,j指向新数组的第一个位置。
从原数组的第二个数开始遍历,如果当前数与上一个数不相同,则说明是新的数,将它存入新数组,并将j加1,指向新数组的下一个位置。
遍历完整个数组后,新数组中只保留了一个相同的数,并且后面的重复数都被删除了。
最后,函数返回新数组的长度j+1作为结果。
### 回答3:
```c
#include <stdio.h>
int fun(int arr[], int n) {
if(n<=1) return n; // 如果数组长度小于等于1,直接返回原数组长度
int i, j; // 双指针法处理数组
for(i=0, j=1; j<n; j++) {
if(arr[i] != arr[j]) {
arr[++i] = arr[j];
}
}
return i+1; // 返回删除重复元素后的数组长度
}
int main() {
int arr[] = {1, 1, 2, 2, 3, 4, 5, 5, 6, 7, 7, 7};
int n = sizeof(arr)/sizeof(arr[0]);
printf("删除重复元素后的数组长度为:%d\n", fun(arr, n));
return 0;
}
```
运行结果:
删除重复元素后的数组长度为:7
解释:
给定数组为{1, 1, 2, 2, 3, 4, 5, 5, 6, 7, 7, 7},使用双指针法处理:
- 初始时,i指向第一个元素,j指向第二个元素。
- 如果arr[i]和arr[j]相等,j后移。
- 如果arr[i]和arr[j]不相等,说明找到了一个新的不同元素,将arr[j]复制到arr[i+1],然后i和j都后移。
- 继续重复上述步骤,直到j超出数组范围。
最后得到的数组为{1, 2, 3, 4, 5, 6, 7},同时返回结果7。
阅读全文