程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 九度OJ 題目1041:Simple Sorting

九度OJ 題目1041:Simple Sorting

編輯:C++入門知識

題目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   分享到: 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved