求序列中的眾數
阿新 • • 發佈:2019-02-17
描述
輸入一個長度為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;
}