题目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;} -
- 注意:
- 排序函数:
提交会Wrong 网友解释 :[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 10000intcmp (constvoid*a ,constvoid*b){return*(int*)a >*(int*)b?1:-1;}intmain(){intn,num[1005],b[1005],flag;inti,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]);}return0;}/**************************************************************Problem: 1041User: kaoyandaren123Language: CResult: AcceptedTime:0 msMemory:912 kb****************************************************************/
本文介绍了一种通过排序和去除重复元素来处理整数数组的方法。重点在于如何避免重复值并确保输出数组有序且不包含重复项。文章还讨论了排序函数的实现细节及其潜在的溢出问题。
443

被折叠的 条评论
为什么被折叠?



