鱼C论坛

 找回密码
 立即注册
查看: 1137|回复: 2

求助一下

[复制链接]
发表于 2023-11-3 11:50:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。

输入格式:
输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。

输出格式:
在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。

输入样例:
3
1234 2345 3456
输出样例:
3: 3 4


这题用C++怎么做
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-3 11:50:43 | 显示全部楼层
这个问题可以通过使用哈希表来解决。首先,我们可以遍历所有的整数,然后对每个整数进行分析,统计每个个位数字出现的次数。最后,我们可以找到出现次数最多的个位数字。

以下是C++的代码实现:
#include <iostream>
#include <unordered_map>
#include <vector>
#include <algorithm>

int main() {
    int N;
    std::cin >> N;
    
    std::unordered_map<int, int> digitCount;
    
    for (int i = 0; i < N; i++) {
        int num;
        std::cin >> num;
        
        while (num > 0) {
            int digit = num % 10;
            digitCount[digit]++;
            num /= 10;
        }
    }
    
    int maxCount = 0;
    std::vector<int> maxDigits;
    
    for (const auto& pair : digitCount) {
        int count = pair.second;
        
        if (count > maxCount) {
            maxCount = count;
            maxDigits.clear();
            maxDigits.push_back(pair.first);
        } else if (count == maxCount) {
            maxDigits.push_back(pair.first);
        }
    }
    
    std::sort(maxDigits.begin(), maxDigits.end());
    
    std::cout << maxCount << ": ";
    
    for (int i = 0; i < maxDigits.size(); i++) {
        std::cout << maxDigits[ i];
        
        if (i != maxDigits.size() - 1) {
            std::cout << " ";
        }
    }
    
    return 0;
}

这段代码首先读取输入的整数个数N,然后使用一个unordered_map来记录每个个位数字的出现次数。接下来,我们遍历每个整数,将其每个个位数字的出现次数记录在unordered_map中。然后,我们找到出现次数最多的个位数字,并将其放入一个vector中。最后,我们对vector进行排序,并输出结果。

希望能帮到你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-3 11:51:19 | 显示全部楼层
问题分析:

我们需要统计每个整数的个位数字出现的次数,并找到出现次数最多的个位数字。

解决方案:

我们可以使用一个大小为10的数组来统计每个数字出现的次数,数组索引表示数字,数组元素表示出现次数。遍历每个整数,将其个位数字对应的计数加1。然后再遍历计数数组,找到出现次数最多的数字。

以下是一个实现该问题的C++代码:
++#include <iostream>#include <vector>using namespace std;int main() {    int N;    cin >> N;    vector<int> count(10, 0); // 用于记录每个数字出现的次数    for (int i = 0; i < N; i++) {        int num;        cin >> num;        while (num != 0) {            int digit = num % 10; // 获取个位数字            count[digit]++; // 对应数字的计数加1            num /= 10; // 移除已经处理过的个位数字        }    }    int maxCount = 0;    for (int i = 0; i < 10; i++) {        if (count[i] > maxCount) {            maxCount = count[i];        }    }    cout << maxCount << ":";    for (int i = 0; i < 10; i++) {        if (count[i] == maxCount) {            cout << " " << i;        }    }    return 0;}
代码说明:

1. 首先,我们定义了一个大小为10的计数数组count,并初始化为0。这个数组用来统计每个数字出现的次数。
2. 然后,我们使用一个循环遍历每个整数。对于每个整数,我们通过不断取余和整除10的操作,获取其个位数字,并将对应的计数加1。
3. 接下来,我们遍历计数数组,找到出现次数最多的数字。我们使用一个变量maxCount来记录最大次数,并逐个比较每个数字的计数。
4. 最后,我们输出结果。首先输出最大次数maxCount,然后遍历计数数组,输出计数等于maxCount的数字。

希望以上解答能满足你的需求,如果有任何进一步的问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 15:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表