第八周C语言编程题 1.其它 对于给定的数列,要求把其中的重复元素删去再从小到大输出。 输入格式: 首先输入一个正整数T,表示测试数据的组数,然后是7组测试数据。每组测试数据先输入一个整数n(1Sn5100),再输入n个整数。 输出格式: 对于每组测试,从小到大输出州删除重复元素之后的结果,每两个数据之间留一个空格。 输入样例: 101222331545 输出样例: 12345 请输入答案
时间: 2025-06-25 13:09:04 浏览: 12
### C语言编程题:删除数列中重复元素并从小到大排序
以下是实现删除数列中重复元素并将剩余元素从小到大排序的一个示例代码及其解析:
#### 示例代码
```c
#include <stdio.h>
// 函数声明
void remove_duplicates_and_sort(int arr[], int *size);
void bubble_sort(int arr[], int size);
int main() {
int n;
printf("请输入数组的大小: ");
scanf("%d", &n);
if (n <= 0) {
printf("数组大小应大于零。\n");
return 1;
}
int arr[n];
printf("请输入%d个整数:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// 调用去重和排序函数
remove_duplicates_and_sort(arr, &n);
// 打印结果
printf("去除重复项并排序后的数组为:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
// 去重和排序函数
void remove_duplicates_and_sort(int arr[], int *size) {
// 使用冒泡排序算法对数组进行排序
bubble_sort(arr, *size);
// 创建一个新的有效索引计数器
int new_size = 1;
// 遍历数组,跳过相同的元素
for (int i = 1; i < *size; i++) {
if (arr[i] != arr[new_size - 1]) {
arr[new_size++] = arr[i];
}
}
// 更新数组的实际大小
*size = new_size;
}
// 冒泡排序函数
void bubble_sort(int arr[], int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 交换两个相邻元素
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
```
---
#### 代码解析
1. **输入部分**
用户通过标准输入提供数组的大小 `n` 和具体的数值列表。如果用户输入的数组大小小于等于零,则提示错误信息并退出程序。
2. **排序功能**
使用经典的冒泡排序算法对原始数组进行升序排列[^4]。这是为了方便后续操作能够轻松识别连续的相同元素。
3. **去重逻辑**
初始化一个新索引来追踪无重复元素的位置。遍历整个已排序数组时,仅当当前元素不同于最后一个被保留下来的唯一值时才将其加入新的子集之中[^5]。
4. **更新数组尺寸**
修改传入指针参数指向的有效数据量来反映最终状态下的实际长度变化情况。
5. **输出结果**
将经过处理之后得到的新集合打印出来供查看验证其正确性。
---
###
阅读全文
相关推荐


















