1. 程式人生 > >求序列中的眾數

求序列中的眾數

描述
輸入一個長度為N的整數序列 (不多於128個整數),每個整數的範圍在[-1052,1052],計算這個序列的眾數。
眾數是指出現次數最多的那個數。
如果有多個數出現的次數都達到最多,則取在原序列最先出現的數為眾數;如果所有的數都相等,則返回”no”。

題目本身沒有什麼好說的,主要是一些細節問題。

比如去掉前導0,但是 不能把 0000000000 去掉為 空……
還有,+0 = -0,這個也要注意。

特判後代碼太醜了

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath> #include<algorithm> using namespace std; char Num[150][270]; int Lgt[150],Crt,Cnt,Vis[150]; bool Cmp(int a,int b) { if(Lgt[a] != Lgt[b]) { return false; } for(int i = 1; i<=Lgt[a]; i++) { if(Num[a][i] != Num[b][i]) { return false; } } return
true; } int main() { char a[275]; int n; scanf("%d",&n); for(int i = 1; i<=n; i++) { scanf("%s",a + 1); int j = 1,len = strlen(a + 1),Start = -1; bool Minus = false; for(int j = 1; j<=len; j++) { if(a[j] == '-') { Minus = true
; } else if(a[j] > '0' && a[j] <= '9') { Start = j; break; } } if(Minus && Start != -1) { Num[i][++Lgt[i]] = '-'; } if(Start == -1) { Start = len; } for(int j = Start; j<=len; j++) { Num[i][++Lgt[i]] = a[j]; } if(!Lgt[i]) { Lgt[i] = 1; } } int Pos = 0; for(int j = 1; j<=n; j++) { Cnt = 0; if(!Vis[j]) { for(int k = 1; k<=n; k++) { if(Cmp(j,k) && !Vis[k]) { Vis[k] = 1; Cnt++; } } } if(Crt < Cnt) { Crt = Cnt; Pos = j; } } if(Crt != n) { for(int j = 1; j<=Lgt[Pos]; j++) { cout<<Num[Pos][j]; } } else { cout<<"no"; } return 0; }