- 题目描述:
You are given an unsorted array of integer numbers. Your task is to sort this array and kill possible duplicated elements occurring in it.
- 输入:
For each case, the first line of the input contains an integer number N representing the quantity of numbers in this array(1≤N≤1000). Next N lines contain N integer numbers(one number per each line) of the original array.
- 输出:
For each case ,outtput file should contain at most N numbers sorted in ascending order. Every number in the output file should occur only once.
- 样例输入:
6
8 8 7 3 7 7
- 样例输出:
3 7 8 一开始的代码居然没通过
#include <cstdio>
#include <algorithm> int n;
int num[]; int cmp(const void *a, const void *b) {
int at = *(int*)a;
int bt = *(int*)b;
return at - bt;
}
int main(int argc, char const *argv[])
{
while(scanf("%d",&n) != EOF) {
for(int i = ; i < n; i++) {
scanf("%d",&num[i]);
}
qsort(num, n, sizeof(int), cmp);
printf("%d",num[]);
for(int i = ; i < n; i++) {
if(num[i] != num[i-]) {
printf(" %d",num[i]);
}
}
puts("");
}
return ;
}题目未告知数据范围,查了半天
测试数据为
2
2147483647 -2
就会失败
修改代码如下
#include <cstdio>
#include <algorithm> int n;
int num[]; int cmp(const void *a, const void *b) {
int at = *(int*)a;
int bt = *(int*)b;
return at > bt;
}
int main(int argc, char const *argv[])
{
while(scanf("%d",&n) != EOF) {
for(int i = ; i < n; i++) {
scanf("%d",&num[i]);
}
qsort(num, n, sizeof(int), cmp);
printf("%d",num[]);
for(int i = ; i < n; i++) {
if(num[i] != num[i-]) {
printf(" %d",num[i]);
}
}
puts("");
}
return ;
}虽然通过,但上面的写法其实不太标准,建议使用sort排序