九度OJ题目1041:Simple Sorting解题报告

题目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
  1. int cmp(const void *a, const void *b){  
  2.     return *(int *)a - *(int *)b;  
  3. }  
提交会Wrong 网友解释
如果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
****************************************************************/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值