yangzhixiaohuli 发表于 2023-11-3 11:50:29

求助一下

给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定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++怎么做

isdkz 发表于 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++;
            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进行排序,并输出结果。

希望能帮到你!

Mike_python小 发表于 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++; // 对应数字的计数加1
            num /= 10; // 移除已经处理过的个位数字
      }
    }

    int maxCount = 0;
    for (int i = 0; i < 10; i++) {
      if (count > maxCount) {
            maxCount = count;
      }
    }

    cout << maxCount << ":";
    for (int i = 0; i < 10; i++) {
      if (count == maxCount) {
            cout << " " << i;
      }
    }

    return 0;
}


代码说明:

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

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

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 求助一下