C语言编写程序删去数组中重复的数字
时间: 2024-05-09 19:17:17 浏览: 13
你可以使用以下代码来删除数组中的重复数字:
```c
#include <stdio.h>
int main() {
int arr[] = {1, 2, 3, 4, 4, 5, 6, 6};
int n = sizeof(arr) / sizeof(int);
int i, j, k;
for (i = 0; i < n; i++) {
for (j = i + 1; j < n;) {
if (arr[j] == arr[i]) {
for (k = j; k < n; k++) {
arr[k] = arr[k + 1];
}
n--;
} else {
j++;
}
}
}
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
运行结果为:1 2 3 4 5 6
相关问题
要求用C语言编写函数,从一个排好序的整型数组中删去某数。
好的,以下是C语言的代码实现:
```c
#include <stdio.h>
void delete(int arr[], int n, int num) {
int i, j, flag = 0;
for (i = 0, j = 0; i < n; i++) {
if (arr[i] == num) {
flag = 1;
continue;
}
arr[j++] = arr[i];
}
if (flag == 0) {
printf("未找到要删除的数!\n");
} else {
printf("删除后的数组为:\n");
for (i = 0; i < j; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n = sizeof(arr) / sizeof(arr[0]);
int num = 5;
printf("原数组为:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
delete(arr, n, num);
return 0;
}
```
这段代码中,我们定义了一个 delete 函数,用于从一个排好序的整型数组中删除某个数。在函数内部,我们使用两个指针 i 和 j 来遍历数组,并且使用一个 flag 标记来判断是否找到要删除的数。当遇到要删除的数时,我们将 flag 置为 1,并跳过这个数;否则,我们将这个数复制到数组的前面,并将 j 指针向后移动一个位置。最后,我们根据 flag 的值输出相应的提示信息,或者输出删除后的数组。
在主函数中,我们定义了一个整型数组和要删除的数,然后调用了 delete 函数来删除这个数。这个程序的输出结果如下:
```
原数组为:
1 2 3 4 5 6 7 8 9 10
删除后的数组为:
1 2 3 4 6 7 8 9 10
```
用c语言编写函数fun,函数的功能是:删去一组数组中所有相同的数,使之只剩一个。数组中的数已按从小到大的顺序排列,函数返回删除后数组的个数
### 回答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。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)