/*
求序列中的衆數
查看 提交 統計 提問
總時間限制: 1000ms 內存限制: 65536kB
描述
輸入一個長度爲N的整數序列 (不多於128個整數),每個整數的範圍在[-10^52,10^52],計算這個序列的衆數。
衆數是指出現次數最多的那個數。
如果有多個數出現的次數都達到最多,則取在原序列最先出現的數爲衆數;如果所有的數都相等,則返回"no"。
輸入
第一行爲序列長度N。
然後是N個數據,每一個數的範圍都是在[-10^52,10^52]。 注意,這N個數之間可能有若干個空行隔開。
注意,輸入數據可能有一些冗餘表達信息,具體來說:
1) 正數和0前面可能有前導0和'+'符號,例如
+000123=123
+0000=0
-0000=0
2)每個數字中不含有空格和其他非數字字符,例如不會出現"100 0"或者"- 100"。
3)每個數字前面至多有一個符號,即不會出現+(-1)、-(+4)和-(-1)等情況。
輸出
輸出只有 1 行:
該序列的衆數或者”no”。
如果有多個數出現的次數都達到最多,則取最先出現的數爲衆數,並且輸出形式應該最簡形式。
例如,如果原序列衆數爲+000123,則輸出123;如果原序列衆數爲+0000或者-0000或者0000,輸出0。
負數正常輸出,例如:如果原序列衆數爲-000000001111,就輸出-1111。
樣例輸入
6
-00001
10000
00011111111111111111111111111111111111
-01
+000000011111111111111111111111111111111111
-00000000000001
樣例輸出
-1
————————————————————————————美麗的分割線——————————————————————————————
思路:
將輸入的每個數字進行標準化處理,便於比較
然後對每個數字,將其與之後的所有數字比較,如果相同,那麼將該數字的與之相同數的數目加一
最後遍歷所有數字的相同數,找出擁有最大相同數的數字即可輸出
注意:所有的大數均用char型數組儲存,比較,輸出
*/
#include <iostream>
#include<cstring>
using namespace std;
int process(char a[10000])//用於處理數字,使之具有相同的格式,方便比較數字是否相同
{
int b=strlen(a);//計算數字的長度
if(isdigit(a[0])!=0)//給數字強制添上正負號 ,
//isdigit()檢查字符是否是0~9中的數,返回true或NULL
{
b++;
for(int i=b;i>0;i--)
a[i]=a[i-1];
a[0]='+';
}
bool p=0;//判斷是不是0
for(int i=1;i<b;i++)
if((a[i]=='0')&&(p==0))//把無用的0刪去
{
b--;
for(int j=i;j<=b;j++)
a[j]=a[j+1];
i--;
}
else
p=1;//防止誤刪
if(p==0)//全是0,就讓數字變爲沒有符號的0
{
a[0]='0';
b=1;
}
return b;//返回數字的長度(算符號)
}
void out(char a[100],int l)//控制輸出的函數
{
bool p=0;//判斷是不是全0
for(int i=1;i<l;i++)
if(a[i]!='0')
p=1;
if(p==0)
cout<<"0"<< endl;
else
{
if(a[0]=='+')//把多餘的加號刪去
for(int i=0;i<l;i++)
a[i]=a[i+1];
cout<<a;
}
}
int main() {
int n;
cin>>n;
char s[100][100];//用於儲存數字
int length[100],num[100];
memset(num,0,400);//重置計數數組
for(int i=0;i<n;i++)
{
cin>>s[i];
length[i]=process(s[i]);//處理數字,length記載數字的長度;
}
for(int i=0;i<n;i++)//比較數字是否相同,並計算從它開始往後的相同個數
for(int j=i;j<n;j++)
{
if(length[i]==length[j])
{
bool p=0;
for(int k=0;k<length[i];k++)
if(s[i][k]!=s[j][k])
p=1;
if(p==0) //如果不同,s[i]擁有的相同數加一
num[i]++;
}
}
int max1=num[0],max2=0;//尋找衆數
for(int i=1;i<n;i++)
if(num[i]>max1)
{
max1=num[i];
max2=i;
}
if(max1==n)//如果從頭到尾只有一個數(也就是沒有衆數),就輸出no
cout<<"no"<<endl;
else//否則正常輸出
out(s[max2],length[max2]);
system("pause");
return 0;
}
序列中的衆數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.