求序列中的众数(51nod版)
3318 求序列中的众数
输入一个长度为N的整数序列 (不多于10000个整数),每个整数的范围在[-10^9,10^9],计算这个序列的众数。 众数是指出现次数最多的那个数。 如果有多个数出现的次数都达到最多,则取在原序列最先出现的数为众数;如果所有的数都相等,则返回"no"。
输入
第一行为序列长度N。然后是N个数,每一个数的范围都是在[-10^9,10^9]。
输出
输出只有 1 行:该序列的众数或者”no”。 如果有多个数出现的次数都达到最多,则取最先出现的数为众数。
输入样例
6 -1 10000 11111 -1 11 -1
输出样例
-1
答案:
#include <bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;
map<int, int> MAP;
int A[10001];
int main()
{
int n;
cin >> n;
cin >> A[0];
MAP.clear();
int MAX = A[0], flag = 1, v = 0;
MAP[A[0]]++;
for (int i = 1; i < n; i++)
{
cin >> A[i];
if (A[i] != A[0])
v = 1;
MAP[A[i]]++;
if (MAP[A[i]] > flag)
{
MAX = A[i];
flag = MAP[A[i]];
}
}
if (v == 0)
cout << "no" << endl;
else
cout << MAX << endl;
return 0;
}
求序列中的众数(noi版)
15:求序列中的众数
- 查看
- 提交
- 统计
- 提问
总时间限制:
1000ms
内存限制:
65536kB
描述
输入一个长度为N的整数序列 (不多于128个整数),每个整数的范围在[-1052,1052],计算这个序列的众数。
众数是指出现次数最多的那个数。
如果有多个数出现的次数都达到最多,则取在原序列最先出现的数为众数;如果所有的数都相等,则返回"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
答案:
#include<iostream>
#include<cmath>
#include<iomanip>
#include<string.h>
using namespace std;
int main(){
struct dedema{
char n[100];
int c;
};
struct dedema q[150] = { };
int n;
int i, j;
int pos;
int max = 0;
char tn[150] =
{ };
int count = 0;
cin >> n;
for (i = 0; i < n; i++)
{
cin >> tn;
pos = 0;
if (tn[pos] >= '0' && tn[pos] <= '9')
{
for (j = strlen(tn); j > 0; j--)
{
tn[j] = tn[j - 1];
}
tn[0] = '+';
}
pos = 1;
while (tn[pos] == '0')
pos++;
if (pos == strlen(tn))
{
tn[2] = 0;
tn[0] = '+';
}
else
{
strcpy(&tn[1], &tn[pos]);
}
for (j = 0; j < count; j++)
{
if (!strcmp(q[j].n, tn))
{
q[j].c++;
break;
}
}
if (j == count)
{
strcpy(q[j].n, tn);
q[j].c++;
count++;
}
memset(tn, 0, 140);
}
for (i = 0; i < count; i++)
{
if (q[i].c > max)
max = q[i].c;
}
if (q[1].c == 0)
{
cout << "no" << endl;
}
else
{
for (i = 0; i < count; i++)
{
if (q[i].c == max)
{
if (q[i].n[0] == '-')
cout << q[i].n << endl;
else
cout << &q[i].n[1] << endl;
break;
}
}
}
return 0;
}