- 题目描述:
-
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
一开始的代码居然没通过1 #include <cstdio> 2 #include <algorithm> 3 4 int n; 5 int num[1002]; 6 7 int cmp(const void *a, const void *b) { 8 int at = *(int*)a; 9 int bt = *(int*)b; 10 return at - bt; 11 } 12 int main(int argc, char const *argv[]) 13 { 14 while(scanf("%d",&n) != EOF) { 15 for(int i = 0; i < n; i++) { 16 scanf("%d",&num[i]); 17 } 18 qsort(num, n, sizeof(int), cmp); 19 printf("%d",num[0]); 20 for(int i = 1; i < n; i++) { 21 if(num[i] != num[i-1]) { 22 printf(" %d",num[i]); 23 } 24 } 25 puts(""); 26 } 27 return 0; 28 }
题目未告知数据范围,查了半天
测试数据为
2
2147483647 -2
就会失败
修改代码如下
1 #include <cstdio> 2 #include <algorithm> 3 4 int n; 5 int num[1002]; 6 7 int cmp(const void *a, const void *b) { 8 int at = *(int*)a; 9 int bt = *(int*)b; 10 return at > bt; 11 } 12 int main(int argc, char const *argv[]) 13 { 14 while(scanf("%d",&n) != EOF) { 15 for(int i = 0; i < n; i++) { 16 scanf("%d",&num[i]); 17 } 18 qsort(num, n, sizeof(int), cmp); 19 printf("%d",num[0]); 20 for(int i = 1; i < n; i++) { 21 if(num[i] != num[i-1]) { 22 printf(" %d",num[i]); 23 } 24 } 25 puts(""); 26 } 27 return 0; 28 }
虽然通过,但上面的写法其实不太标准,建议使用sort排序