蓝桥杯算法日常|枚举[*找到最多的数]

devtools/2025/1/19 16:09:10/

**找到最多的数**

重点疑问总结:

1、数组输入输出c++一般会采用那种方便的方式??

用的就是我想的那种,就是用的最大范围定义的。

2、怎样方便给数组中每个数出现的次数计数??

刚开始想的是:每个数把全部的数比较一下子

最后发现最佳方法是:哈希表,这里用了一个数组,数组下标表示统计的哪个数,数组的值是该数出现的次数。

题目截图 

解题思路:

  1. 遍历矩阵,将每个数字及其出现次数存储在一个哈希表(这里使用数组模拟哈希表)中。
  2. 遍历哈希表,找到出现次数超过矩阵元素总数一半的数字。

C语言代码实现:

#include <stdio.h> // 定义矩阵最大行数和列数的常量
#define MAX_SIZE 1000 
#define MAX_NUM 1000 int main() { // 用于存储矩阵的行数和列数int n, m; // 从标准输入读取矩阵的行数和列数scanf("%d %d", &n, &m); // 定义二维数组(矩阵),其大小由输入的n和m决定int matrix[n][m]; // 嵌套循环,外层循环遍历行,内层循环遍历列for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { // 从标准输入读取矩阵每个元素的值scanf("%d", &matrix[i][j]); } } // 定义哈希表(这里用数组模拟),用于统计每个数字出现的次数,初始化为0int hashTable[MAX_NUM] = {0}; // 嵌套循环,遍历矩阵的每个元素for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { // 对应数字在哈希表中的计数加1,表示该数字出现了一次hashTable[matrix[i][j]]++; } } // 计算矩阵的总元素个数int totalElements = n * m; // 遍历哈希表for (int i = 0; i < MAX_NUM; i++) { // 如果某个数字出现的次数大于总元素个数的一半if (hashTable[i] > totalElements / 2) { // 输出这个数字printf("%d\n", i); // 程序结束并返回0,表示正常结束return 0; } } // 如果没有找到符合条件(出现次数大于总元素个数一半)的数字,输出提示信息printf("No such number\n"); return 0; 
}

上述代码首先读取矩阵的行数和列数,然后读取矩阵的元素。接着使用一个数组hashTable来统计每个数字出现的次数。最后遍历hashTable,找到出现次数超过矩阵元素总数一半的数字并输出。如果没有找到这样的数字,则输出No such number

请注意,这里假设矩阵中的数字范围较小(不超过MAX_NUM),如果数字范围较大,可能需要使用更高效的哈希表数据结构,如unordered_map(如果使用C++)或其他更复杂的哈希实现(如果仅使用C)。此外,上述代码没有进行输入数据的合法性检查,在实际应用中可能需要添加相应的检查以确保程序的健壮性。

解题思路:

  1. 遍历矩阵,将每个元素放入一个unordered_map中,key为矩阵元素的值,value为该元素出现的次数。
  2. 遍历unordered_map,找到出现次数超过矩阵元素总数一半的元素并返回。

C++代码实现:

#include <iostream> 
#include <unordered_map> 
using namespace std; // 主函数,程序的入口点
int main() { // 定义两个整数n和m,用于接收输入int n, m; // 从标准输入读取n和m的值cin >> n >> m; // 计算矩阵的总元素个数int totalElements = n * m; // 创建一个无序映射(哈希表),用于存储数字及其出现的次数unordered_map<int, int> countMap; // 外层循环,遍历n行for (int i = 0; i < n; i++) { // 内层循环,遍历m列for (int j = 0; j < m; j++) { // 定义一个整数num,用于接收输入的数字int num; // 从标准输入读取一个数字cin >> num; // 在countMap中查找num,如果不存在则插入并将其出现次数设为1,// 如果存在则将其出现次数加1countMap[num]++; } } // 遍历countMap中的每一个键值对for (auto& pair : countMap) { // 如果某个数字的出现次数大于总元素个数的一半if (pair.second  > totalElements / 2) { // 输出这个数字cout << pair.first  << endl; // 结束程序,返回0return 0; } } // 如果没有找到出现次数大于总元素个数一半的数字,返回0return 0; 
}

上述代码首先读取矩阵的行数n和列数m,然后通过两层循环遍历矩阵,将每个元素放入unordered_map中统计出现次数。最后再次遍历unordered_map,找到出现次数超过一半的元素并输出。如果没有找到这样的元素,程序正常结束。

请注意,此代码假设输入的矩阵元素都是正整数,并且一定存在一个出现次数超过一半的数字。如果输入不满足这些条件,可能需要添加额外的错误处理代码。


http://www.ppmy.cn/devtools/151852.html

相关文章

HTML5 教程(下)

HTML5 Video(视频) HTML5 Video(视频) 在本节内容中&#xff0c;你将了解到在HTML5中视频是如何工作的、主流浏览器支持的视频格式以及如何对网页中的视频进行控制。 很多站点都会使用到视频. HTML5 提供了展示视频的标准。 检测您的浏览器是否支持 HTML5 视频&#xff1a; …

C++ 并发编程之std::find的并发版本

在C中&#xff0c;std::find 是一个用于顺序查找容器中特定元素的算法。为了提高性能&#xff0c;我们可以设计并实现一个并行版本的 std::find&#xff0c;以便在多核处理器上并行执行查找操作。基本思想是将容器中的元素划分为若干块&#xff0c;每个块由一个单独的线程处理&…

批量清理docker 容器日志

在日常开发过程中docker容器可能会有很大的日志占用空间&#xff0c;尝尝需要定期清理。下面提供查看容器日志大小和清理日志的一种解决方式 效果图 查看容器日志 bash docker_log_size.sh清理日志 bash docker_clean_logs.sh脚本 docker_log_size.sh #!/bin/bash# 获取所…

idea本地jar包添加到项目的maven库 mvn install:install-file

背景 最近在开发项目中需要对接海康威视摄像头&#xff0c;进行视频、照片等数据的获取保存&#xff1b;海康提供的sdk的jar包是自己开发的&#xff0c;在maven库中是找不到的&#xff0c;在项目中需要手动指定jar包路径 <dependency><groupId>com.haikang</g…

蓝桥杯刷题第二天——背包问题

题目描述 有N件物品和一个容量是V的背包。每件物品只能使用一次。第i件物品的体积是Vi价值是Wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 第一行两个整数&#xff0c;N&#xff0c;V&am…

游戏引擎学习第79天

当前任务回顾 我们目前的工作重点是碰撞检测的更新&#xff0c;特别是将游戏的世界表示方式扩展到三维空间。尽管游戏本身是二维的&#xff0c;但我们希望它能够在三维空间中处理更多的内容&#xff0c;以支持那些需要考虑高度的游戏元素&#xff0c;如楼层、台阶等。我们的目…

青少年CTF练习平台 文章管理系统(sqlmap使用os-shell找flag)PHP

题目 点击下一篇出现参数id&#xff0c;单引号报错 找到注入点启动sqlmap 用sqlmap的os-shell执行命令获取flag python sqlmap.py -u http://challenge.qsnctf.com:32372/?id1 --os-shell 执行命令查找flag find / -name flag* find / -name *flag 发现/flag目录&#xff0c…

如何在谷歌浏览器中设置自定义安全警告

随着网络环境的日益复杂&#xff0c;浏览器的安全问题也愈发引人关注。谷歌浏览器作为一款广泛使用的浏览器&#xff0c;其自定义安全警告功能为用户提供了更加个性化和安全的浏览体验。本文将详细介绍如何在谷歌浏览器中设置自定义安全警告&#xff0c;帮助用户更好地保护自己…