题目1041:Simple Sorting
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:5352
解决:2047
-
题目描述:
-
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
-
解题分析:在做该题的时候,由于排序函数的问题,一直Wrong Answer,看了别人的排序函数之后,才做正确;输出格式也需要注意。思路是每次输入一个数的时候,判断该数是否已经出现过,若没有,则保存到一个新数组中,若已经出现过,则忽略,继续判断下一个输入数值。
for
(i=0;i<n;i++){
flag=1;
scanf
(
"%d"
,&num[i]);
temp=num[i];
for
(j=0;j<count;j++){
if
(b[j]==temp){
flag=0;
break
;
}
}
if
(flag==1) b[count++]=temp;
}
-
- 注意:
- 排序函数:
[cpp] view plain copy- int cmp(const void *a, const void *b){
- return *(int *)a - *(int *)b;
- }
- 如果a=2147483647,b=-2;就会出现a-b>0,结果溢出了。所以使用return *(int *)a>*(int *)b?1:-1;就对了
测试数据:
2
2147483647 -2 -
源代码:
-
#include <stdio.h>
#include <math.h>
#define MAXNUM 10000
int
cmp (
const
void
*a ,
const
void
*b){
return
*(
int
*)a >*(
int
*)b?1:-1;
}
int
main(){
int
n,num[1005],b[1005],flag;
int
i,count,j,temp;
while
(
scanf
(
"%d"
,&n)!=EOF){
j=0, count=0;flag=1;
for
(i=0;i<1005;i++)
b[i]=-1;
for
(i=0;i<n;i++){
flag=1;
scanf
(
"%d"
,&num[i]);
temp=num[i];
for
(j=0;j<count;j++){
if
(b[j]==temp){
flag=0;
break
;
}
}
if
(flag==1) b[count++]=temp;
}
qsort
(b,count,
sizeof
(b[0]),cmp);
for
(i=0;i<count-1;i++)
printf
(
"%d "
,b[i]);
printf
(
"%d\n"
,b[count-1]);
}
return
0;
}
/**************************************************************
Problem: 1041
User: kaoyandaren123
Language: C
Result: Accepted
Time:0 ms
Memory:912 kb
****************************************************************/