输入N个无序的数,请将相同的数删成只剩下一个,并将删除后的数列从小到大排序后输出。(如输入:8 32 12 25 12 8 36 25 26 12 ,输出:8 12 25 26 32 36)输入要求二行,第一行整数N(小于1000),表示有N个整数; 第二行,N个无序的整数(小于32767)输出格式要求排序后并删除相同整数输出。用C语言实现
时间: 2024-03-07 10:46:44 浏览: 112
好的,下面是用C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
return *(int*)a - *(int*)b; // 比较函数用于qsort排序
}
int main() {
int n, i, j;
scanf("%d", &n); // 输入整数个数
int nums[n];
for (i = 0; i < n; i++) {
scanf("%d", &nums[i]); // 输入无序的整数数组
}
qsort(nums, n, sizeof(int), compare); // 对数组从小到大排序
printf("%d ", nums[0]); // 先输出第一个数字
for (i = 1; i < n; i++) {
if (nums[i] != nums[i-1]) { // 如果相邻的两个数字不同,则输出当前数字
printf("%d ", nums[i]);
}
}
return 0;
}
```
如果您输入的数字是:8 32 12 25 12 8 36 25 26 12,那么程序将会输出:8 12 25 26 32 36。
希望能够帮助到您!
相关问题
输入N个无序的数,请将相同的数删成只剩下一个,并将删除后的数列从小到大排序后输出。(如输入:8 32 12 25 12 8 36 25 26 12 ,输出:8 12 25 26 32 36)
可以使用哈希表来实现这个功能。具体步骤如下:
1. 定义一个哈希表,将输入的数作为键,将其出现的次数作为值。
2. 遍历哈希表,将出现次数大于等于1的键存入一个新的数组中。
3. 对这个数组进行从小到大排序。
4. 输出排序后的数组。
下面是Python代码实现:
```python
def remove_duplicates(nums):
# 定义哈希表
hash_table = {}
for num in nums:
if num not in hash_table:
hash_table[num] = 1
else:
hash_table[num] += 1
# 将出现次数大于等于1的键存入数组
unique_nums = [num for num in hash_table if hash_table[num] >= 1]
# 对数组进行排序
unique_nums.sort()
# 输出结果
print(' '.join(str(num) for num in unique_nums))
if __name__ == '__main__':
nums = [8, 32, 12, 25, 12, 8, 36, 25, 26, 12]
remove_duplicates(nums)
```
输出结果为:8 12 25 26 32 36。
注意:这里使用了Python内置的字典来作为哈希表,可以方便地实现键值对的存储和查询。
c语言 输入N个无序的数,请将相同的数删成只剩下一个,并将删除后的数列从小到大排序后输出。(如输入:8 32 12 25 12 8 36 25 26 12 ,输出:8 12 25 26 32 36)
好的,这个问题可以用数组和快速排序算法来解决。具体步骤如下:
1. 首先,遍历输入的数列,将每个数作为数组的一个元素,加入数组中。
2. 对数组进行快速排序,将相同的数排在一起。
3. 遍历排序后的数组,将重复的数删除,只保留第一个数。
这样,就能得到删除重复数后的有序数列。下面是具体的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
return *(int *)a - *(int *)b;
}
int remove_duplicates(int nums[], int n) {
int i, j;
for (i = 0, j = 0; i < n; i++) {
if (nums[i] != nums[j]) {
j++;
nums[j] = nums[i];
}
}
return j + 1;
}
int main() {
int n, i, len;
scanf("%d", &n);
int nums[n];
for (i = 0; i < n; i++) {
scanf("%d", &nums[i]);
}
qsort(nums, n, sizeof(int), compare);
len = remove_duplicates(nums, n);
for (i = 0; i < len; i++) {
printf("%d ", nums[i]);
}
return 0;
}
```
示例输入:`10 8 32 12 25 12 8 36 25 26 12`,输出:`8 12 25 26 32 36`。
需要注意的是,这里只是给出了一种可能的实现方式,实际上还有很多其他的方法可以解决这个问题,比如哈希表、二叉搜索树等。
阅读全文