国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

201503-2

2019-11-08 03:09:49
字體:
來源:轉載
供稿:網友
問題描述
試題編號:201503-2
試題名稱:數字排序
時間限制:1.0s
內存限制:256.0MB
問題描述:問題描述  給定n個整數,請統計出每個整數出現的次數,按出現次數從多到少的順序輸出。輸入格式  輸入的第一行包含一個整數n,表示給定數字的個數。  第二行包含n個整數,相鄰的整數之間用一個空格分隔,表示所給定的整數。輸出格式  輸出多行,每行包含兩個整數,分別表示一個給定的整數和它出現的次數。按出現次數遞減的順序輸出。如果兩個整數出現的次數一樣多,則先輸出值較小的,然后輸出值較大的。樣例輸入125 2 3 3 1 3 4 2 5 2 3 5樣例輸出3 42 35 31 14 1評測用例規模與約定  1 ≤ n ≤ 1000,給出的數都是不超過1000的非負整數。
問題分析:題目求某個數字出現的次數,立即想到哈希表的思想,即將數字和次數用數組來聯系起來。又題目說明任意數字是不超過1000的非負整數,滿足哈希表非負整數和大小較小(1000個int型變量 一共4000字節左右  內存為256M)的特點。由于輸出時要求一定的格式,因此需要將數字及次數的對應關系存儲在另一個結構體數組中然后利用庫函數進行排序。代碼:#include <iostream>#include<algorithm>using namespace std;/* run this PRogram using the console pauser or add your own getch, system("pause") or input loop */int num[1001];int n;struct Num{int i,count;bool Operator <(const Num &n)const{bool ans=false;if(count>n.count){ans=true;}if(count == n.count){if(i<n.i){ans=true;}} return ans;}};Num N[1001];int main(int argc, char *argv[]) {while(cin>>n){for(int i=0;i<1001;i++){num[i]=0;}for(int i=0;i<n;i++){int tmp;cin>>tmp;num[tmp]++;}for(int i=0;i<1001;i++){N[i].i=i;N[i].count=num[i];}sort(N,N+1001);  //n=1000時 tmp=1000 那么就需要排序到1000這里 因此N+1001 bool out=false;for(int i=0;i<1001;i++){if(N[i].count != 0){if(out == false){out=true;}else{cout<<endl;} cout<<N[i].i<<" "<<N[i].count;}} }return 0;}代碼分析:提交時出現如圖情況90分時分析可能是邊界值出現錯誤,果然發現是由于n==1000時排序出現錯誤。最后正確。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 综艺| 德州市| 彝良县| 曲阳县| 株洲县| 镇雄县| 河间市| 北流市| 略阳县| 珲春市| 荣成市| 乡城县| 永福县| 东阿县| 寿阳县| 洱源县| 临湘市| 河东区| 新源县| 枣阳市| 民乐县| 石台县| 开江县| 固安县| 东光县| 平度市| 乐至县| 邵阳市| 五河县| 绥芬河市| 苍梧县| 明溪县| 遂昌县| 板桥市| 行唐县| 喀喇沁旗| 福贡县| 瓮安县| 柳州市| 吴桥县| 海门市|