0
点赞
收藏
分享

微信扫一扫

求序列中的众数(51nod,noi皆可使用)

Gaaidou 2022-04-15 阅读 82
c++

求序列中的众数(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;
}
举报

相关推荐

0 条评论