題目1041:Simple Sorting時間限制:1 秒 內存限制:32 兆 特殊判題:否 提交:1654 解決:630 題目描述: 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來源: 2008年上海交通大學計算機研究生機試真題 [cpp] /********************************* * 日期:2013-2-19 * 作者:SJF0115 * 題號: 九度OJ 題目1041:Simple Sorting * 來源:http://ac.jobdu.com/problem.php?pid=1041 * 結果:AC * 來源:2008年上海交通大學計算機研究生機試真題 * 總結: **********************************/ #include<stdio.h> #include<string.h> #include<stdlib.h> //排序函數 int cmp(const void *a, const void *b) { return *((int*)a) > *((int*)b) ? 1: -1; } int Num[1001]; int key[1001]; int main() { int i,j,k,n,first; while(scanf("%d",&n) != EOF){ k = 0; first = 1; //輸入數據 for(i = 0;i < n;i++){ scanf("%d",&Num[i]); } //排序 qsort(Num,n,sizeof(Num[0]),cmp); key[k] = Num[0]; //去掉重復數據 for(i = 0;i < n;i++){ if(key[k] != Num[i]){ key[++k] = Num[i]; } } //輸出 for(i = 0;i <= k;i++){ //格式輸出 if(first){ first = 0; } else{ printf(" "); } printf("%d",key[i]); } printf("\n"); } return 0; } /********************************* * 日期:2013-2-19 * 作者:SJF0115 * 題號: 九度OJ 題目1041:Simple Sorting * 來源:http://ac.jobdu.com/problem.php?pid=1041 * 結果:AC * 來源:2008年上海交通大學計算機研究生機試真題 * 總結: **********************************/ #include<stdio.h> #include<string.h> #include<stdlib.h> //排序函數 int cmp(const void *a, const void *b) { return *((int*)a) > *((int*)b) ? 1: -1; } int Num[1001]; int key[1001]; int main() { int i,j,k,n,first; while(scanf("%d",&n) != EOF){ k = 0; first = 1; //輸入數據 for(i = 0;i < n;i++){ scanf("%d",&Num[i]); } //排序 qsort(Num,n,sizeof(Num[0]),cmp); key[k] = Num[0]; //去掉重復數據 for(i = 0;i < n;i++){ if(key[k] != Num[i]){ key[++k] = Num[i]; } } //輸出 for(i = 0;i <= k;i++){ //格式輸出 if(first){ first = 0; } else{ printf(" "); } printf("%d",key[i]); } printf("\n"); } return 0; } 注意: 排序函數: [cpp] int cmp(const void *a, const void *b){ return *(int *)a - *(int *)b; } int cmp(const void *a, const void *b){ return *(int *)a - *(int *)b; }提交會Wrong 網友解釋: 如果a=2147483647,b=-2;就會出現a-b>0,結果溢出了。所以使用return *(int *)a>*(int *)b?1:-1;就對了 測試數據: 2 2147483647 -2 分享到: