本题要求统计一个整型序列中出现次数最多的整数及其出现次数。 输入格式: 输入在一行中给出序列中整数个数n(0<n≤1000),以及n个整数。数字间以空格分隔。 输出格式: 在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的。
时间: 2023-05-31 10:20:58 浏览: 63
统计每个整数的出现次数
3星 · 编辑精心推荐
### 回答1:
本题要求统计一个整型序列中出现次数最多的整数及其出现次数。输入格式为:在一行中给出序列中整数个数n(0<n≤1000),以及n个整数。数字间以空格分隔。输出格式为:在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的。
### 回答2:
题目分析:
本题的主要思路是统计出整数序列中每个整数出现的次数,并找到出现次数最多的整数。
具体步骤如下:
1.读入整数序列的长度n和n个整数。
2.建立一个哈希表用于统计整数出现的次数。哈希表的键key为整数,值value为出现次数。
3.遍历整数序列,如果整数已经在哈希表中,则将其对应的值加1;否则,在哈希表中添加该整数,值初始化为1。
4.遍历完整个整数序列后,再遍历一遍哈希表,找到出现次数最多的整数。
5.输出出现次数最多的整数及其出现次数。
代码实现:
代码实现分为两部分,分别是建立哈希表和找到出现次数最多的整数。
1.建立哈希表
由于本题中整数序列中的整数可能非常大,直接使用整数作为哈希表的键可能会导致哈希表的空间超限。因此,我们需要将哈希表的键设计为字符串类型,将整数转换为字符串之后再存入哈希表中。
下面是哈希表的建立代码:
```
#define MAXN 1005
#define MAXM 40000
int n, A[MAXN];
unordered_map<string, int> hashTable;
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &A[i]);
string key = to_string(A[i]);
if (hashTable.count(key) > 0)
hashTable[key]++;
else
hashTable[key] = 1;
}
return 0;
}
```
上面的代码先读入整数序列的长度n,然后用一个数组A保存整数序列。
在遍历整数序列的过程中,每读入一个整数i,则将其转换为字符串类型key,并在哈希表中查找是否存在该键。如果该键已经存在,则将其对应的值加1;否则,在哈希表中添加该键,并将其对应的值初始化为1。
2.找到出现次数最多的整数
在哈希表建立完成之后,我们需要找到出现次数最多的整数。
下面是代码实现:
```
int maxCount = 0;
int maxKey;
for (auto it = hashTable.begin(); it != hashTable.end(); it++)
{
if (it->second > maxCount)
{
maxCount = it->second;
maxKey = stoi(it->first);
}
}
printf("%d %d\n", maxKey, maxCount);
```
上面的代码用一个迭代器it遍历哈希表,找到出现次数最多的整数。
具体方法是,遍历哈希表中每个键值对,如果该键对应的值大于当前最大值maxCount,则将最大值maxCount更新为该键的值,并将其对应的键key保存为当前出现次数最多的整数maxKey。
最后,我们将出现次数最多的整数maxKey和其出现次数maxCount输出即可。
完整代码:
### 回答3:
本题要求统计一个整型序列中出现次数最多的整数及其出现次数。
思路:
我们可以使用一个哈希表来记录每个数字出现的次数,然后再遍历哈希表找到出现次数最多的数字即可。
具体来说,我们可以遍历输入序列,对于每个数字,都在哈希表中查找对应的计数器。如果哈希表中没有该数字的计数器,就新建一个。如果有计数器,则将其值加一。
然后我们再遍历一遍哈希表,找到计数器值最大的那个数字即可。
代码:
阅读全文