题目描述:

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排序

05-28 22:28