C++基础算法之枚举

news2024/10/2 16:23:09

星光不问赶路人

岁月不负有心人


🎥烟雨长虹,孤鹜齐飞的个人主页

🔥个人专栏

期待小伙伴们的支持与关注!!!


目录

枚举算法的简介 

枚举算法的运用

#特别数的和

题目描述#

输入描述#

输入输出样例#

 #找到最多的数

问题描述#

输入格式#

输出格式#

#特殊日期

问题描述#

#不高兴的津津

题目描述#

输入描述#

输出描述#

输入输出样例#

#小蓝的漆房

问题描述#

输入格式#

输出格式#

总结:

枚举本质:

解题思路:

注意事项

枚举算法的简介 


枚举算法的介绍>:

<1>枚举通过穷举所有可能的情况来解决问题,本质上就是一种搜索算法

枚举算法的基本思想>:

<1>将问题的所有解的可能都列举出来

<2>根据题目要求验证和比较找到满足问题条件的优解或者所有解

枚举算法的优缺点>:

<1>优点:简单直观,不需要复杂的数学推导,易于实现

<2>缺点:运算量过大,当问题的规模变大的时候,循环的阶数越大,执行速度越慢

枚举算法的运用场景>:

<1>枚举算法适用于问题规模较小、解空间可穷举的情况

枚举算法的运用

#特别数的和


题目描述#

小明对数位中含有2、0、1、9的数字很感兴趣(不包括前导0),在 1 到 40 中这样的数包括 1、2、9、10至32、39和40,共28 个,他们的和是574。
请问,在 1 到 n 中,所有这样的数的和是多少?


输入描述#

输入格式#
输入一行包含两个整数 n (1<=n<=10^4)


输出描述#
输出一行,包含一个整数,表示满足条件的数的和。


输入输出样例#

输入

40

输出

574

#include<bits/stdc++.h>
using namespace std;
bool PanDuan(int n)
{
  while(n)
  {
    int num = n%10;
    if(num == 2||num == 0||num == 1||num == 9)
    {
      return true;
      break;
    }
    n /= 10;
  }
  return false;
}
int main()
{
  int n,sum = 0;
  cin>>n;
  for(int i = 1;i<=n;i++)
  {
    if(PanDuan(i))
    {
      sum += i;
    }
  }
  cout<<sum<<"\n";
  return 0;
}

将 1 到 n 所有的可能都遍历(枚举)一遍,并通过函数来判断是否满足题目需要

 #找到最多的数


问题描述#

在一个 n x m 的矩阵中,有一个数字出现了超过一半的次数,请设计一个高效算法找到这个数字。


输入格式#

输入第一行包含两个整数n和m,表示矩阵的大小(1<=n,m<=10^3)。接下来n行,每行包含m个正整数,表示矩阵中的元素。


输出格式#

输出一个整数,表示矩阵中出现次数超过一半的数字。

样例输入#

3 3
1 2 3
2 2 2
1 2 2

样例输出#

2

库函数 map - 统计元素出现的次数

map<type1,type2> maps

type1是记入的元素,type2是计入的次数


#include <bits/stdc++.h>
using namespace std;
map<int,int> mp;
int main()
{
  int n,m,x;
  cin>>n>>m;
  for(int i=1;i<=n*m;i++)
  {
    cin>>x;
    mp[x]++;
  }
  for(const auto &[x,y]:mp)
{
  if(y*2>n*m)
  {
    cout<<x<<endl;
  }
}
  return 0;
}

#特殊日期

问题描述#

对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。请问从1900年1月1日至9999年12月31日总共有多少天,年份的数位数字之和等于月的数位数字之和加日的数位数字之和。
例如,2022年11月13日满足要求,因为2+0+2+2(1+1)+(1+3)。
请提交满足条件的日期的总数量。


#include<bits/stdc++.h>
using namespace std;
int PanDuan(int n)
{
  int sum = 0;
  while(n)
  {
    sum += n%10;
    n /= 10;
  }
  return sum;
}
int main()
{
  int count = 0;
  int i,j,year,month,days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  for(year = 1900;year<=9999;year++)
  {
     if((year%4 == 0)&&(year%100 != 0)||(year %400 == 0)) //判断闰年
    {
      days[2] = 29;
    }
    else days[2] = 28;
    for(i = 1;i<=12;i++)
    {
     for(j = 1;j<=days[i];j++)
     {
        if( PanDuan(year) ==  PanDuan(i)+ PanDuan(j))
      {
        count++;
      }
     }
    }
  }
  cout<<count<<endl;
  return 0;
}

#不高兴的津津

题目描述#


津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。


输入描述#


输入七行数据,分别表示周一到周日的日程安排。每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。


输出描述#


输出一个数字。如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用 1,2,3,4,5,6,7 分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的天。


输入输出样例#

输入#

5 3
6 2
7 2
5 3
5 4
0 4
0 6

输出#

3

#include<bits/stdc++.h>
using namespace std;
int main()
{
  int a,b,max = 0,num = 0;
  for(int i = 1;i<=7;i++)
  {
    cin>>a>>b;
    if(a+b>max)
    {
      max = a+b;
      num = i;
    }
  }
  if(num)
  {
    cout<<num;
  }
  else
  {
  cout<<"0";
  }
  return 0;
}

#小蓝的漆房

问题描述#

小蓝是一位有名的漆匠,他的朋友小桥有一个漆房,里面有一条长长的走廊,走廊两旁有许多相邻的房子,每间房子最初被涂上了一种颜色。
小桥来找小蓝,想让他把整个走廊都涂成同一个颜色。小蓝告诉小桥,他每天只能涂一段长度为k的区间。对于每个区间,他可以选择将其中的房子重新涂上任何一种颜色,或者保持原来的颜色不变
小桥想知道小蓝至少要涂几天,才能让整个走廊变得美丽。
请帮助小桥解决这个问题。


输入格式#

第一行包含一个整数t(t<=100),表示测试用例的数量。
每个测试用例的第一行包含两个整数n和k(1<=k<=n<10^4),第二行包含n 个整数 a1,a2,···,an (1<=ai<=60),分别表示每个房子最初的颜色。

1
2


保证所有测试用例中n的总和不超过10^4。

输出格式#

对于每个测试用例,输出一个整数,表示小蓝需要涂漆的最少天数。

样例输入#

2
5 2
1 1 2 2 1
6 2
1 2 2 3 3 3

样例输出#

1
2

#include <bits/stdc++.h>
using namespace std;
int main() {
    int t=0;
    cin >> t;
    while(t--){
        int m,k;
        cin >> m >> k;        
        vector<int> arr(m);    
        set<int> s;     
        for (int i = 0; i < m; i++) {
            cin >> arr[i];
            s.insert(arr[i]);    
        }
        int num = 10000;
        for (auto &x: s) {        //遍历元素
            int sum = 0;
            for (int i = 0; i < m; i++) {
                if (arr[i] == x)continue;        //如果涂到的颜色与此次涂的颜色一致,那么跳过
                sum += 1;                        //如果不一致就加一
                i += k - 1;         //由于是i++,因为一次是涂k区间这么大,所以还需要+k所以这里要-1
            }
            num = min(num, sum);                 //记录最小次数
        }
        cout << num << '\n';
    }
   return 0;
}

总结:

枚举本质:

列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能解是否是问题的真正解,若是,我们采纳这个解,否则抛弃它


解题思路:

1.循环(枚举问题的解)
2.条件判断(筛选问题的解)
3.输出解的形式(输出所有符合题目要求的解或输出解的个数)


注意事项:

<1>枚举时要注意数据范围,列出所有可能情况,不能重复,不能遗漏

<2>枚举时要尽量缩小数据范围,提高计算效率,或者进行优化

<3>根据题目要求注意判断,挑选符合条件的解输出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1378056.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习+大数据项目

一、特征工程 特征清洗 特征监控 特征选择 计算每一个特征和响应变量的相关性 通过L1正则项来选择特征 训练能对特征打分的预选模型 通过特征组合后再来选择特征 通过深度学习来进行特征选择

Python笔记08-面向对象

文章目录 类和对象构造方法内置方法封装继承类型注解多态 类只是一种程序内的“设计图纸”&#xff0c;需要基于图纸生产实体&#xff08;对象&#xff09;&#xff0c;才能正常工作 这种套路&#xff0c;称之为&#xff1a;面向对象编程 类和对象 定义类的语法如下&#xff…

Qt 调试体统输出报警声

文章目录 前言一、方法1 使用 Qsound1.添加都文件 直接报错2.解决这个错误 添加 QT multimedia3. 加入代码又遇到新的错误小结 二、第二种方法1.引入库 总结 前言 遇到一个需求&#xff0c;使用Qt输出报警声&#xff0c;于是试一试能调用的方法。 一、方法1 使用 Qsound 1.…

Hive 数据同步

一、需求 同步集团的数据到断直连环境。 二、思路 三、同步数据&#xff08;方案&#xff09; 1、环境&#xff1a;断直连模拟环境 2、操作机器&#xff1a;ETL 机器 XX.14.36.216 3、工作路径&#xff1a;cd /usr/local/fqlhadoop/hadoop/bin 4、执行命令&#xff1a; 命令…

IPv6路由协议----BGP4+

BGP基本概念 边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的距离矢量路由协议。 MP-BGP是对BGP4进行了扩展达到在不同网络中应用的目的,BGP4原有的消息机制和路由机制并没有改变。MP-BGP在IPv6单播网…

如何在“Microsoft Visual Studio”中使用OpenCV构建应用程序

我在这里描述的所有内容都将应用于 OpenCV 的界面。我首先假设您已经阅读并成功完成了 Windows 中的安装教程。因此&#xff0c;在进一步操作之前&#xff0c;请确保您有一个包含 OpenCV 头文件和二进制文件的 OpenCV 目录&#xff0c;并且您已按照此处所述设置环境变量 设置 O…

每日一题——LeetCode1103.分糖果 ||

方法一 个人方法&#xff1a; 有多少人就创建多大的数组并把数组的所有元素初始化为0&#xff0c;只要还有糖果&#xff0c;就循环给数组从头到尾添加糖果&#xff0c;每次分的糖果数递增1&#xff0c;最后可能刚好分完也可能不够&#xff0c;不够就还剩多少给多少。 var dis…

力扣刷题记录(28)LeetCode:797、200、463

797. 所有可能的路径 解题思路&#xff1a;回溯算法&#xff0c;当收集到的路径的最后一个值等于n-1时&#xff0c;收集答案。 参数&#xff1a;图、当前结点 class Solution { public:vector<int> path;vector<vector<int>> ans;void dfs(vector<vector…

Java获取IP地址及对应的归属地

目录 前言 一、获取访问的IP地址 二、通过IP地址获取对应的归属地 2.1 Ip2region 2.1.1 高达 99.9 % 的查询准确率 2.1.2 Ip2region V2.0 特性 2.1.3 多语言以及查询客户端的支持 2.2 Ip2region xdb Java 查询客户端实现 2.2.1 引入 Maven 仓库 2.2.2 ip2region.xdb …

从Scroll怒喷社区用户事件,看L2龙头ZKFair的做事格局

这两天&#xff0c;随着美国SEC正式批准所有11只比特币现货ETF的消息公布&#xff0c;吸引了传统主流增量资金的入场&#xff0c;比特币多头一举将比特币干到了48000刀的位置&#xff0c;并随时向着前高发起了冲击。比特币的强势带动了其他加密资产的保障&#xff0c;整个加密市…

Android开发基础(四)

Android开发基础&#xff08;四&#xff09; 本篇将从Android数据存储方式去理解Android开发。 Android数据存储方式 Android提供了多种数据存储方式。 一、SharedPreferences存储 主要用于存储一些简单的配置信息&#xff0c;如登录账号密码等&#xff1b; 这种存储方式采…

类和对象---C++

类和对象目录 类和对象1.封装1.1 封装的意义1.2 struct和class区别1.3 成员属性设置为私有1.3.1 联系---判断圆和点的位置关系 2.对象的初始化和清理2.1 构造函数和析构函数2.2 构造函数的分类及调用2.2.1无参构造函数调用2.2.2有参构造函数调用2.2.2.1括号法2.2.2.2显式法2.2.…

C++学习笔记(二十八):c++ 静态库及动态库的使用

静态库的使用 库的使用会很大程度减少我们的工作&#xff0c;本节对c中静态库和动态库的使用进行简单的介绍。静态链接库意味着这个库会被放到可执行文件中&#xff0c;在生成的exe中。动态链接库是在程序运行时链接的&#xff0c;可以在程序运行时调用加载库函数的方法来实现&…

蚂蚁爱购--靠谱的SpringBoot项目

简介 这是一个靠谱的SpringBoot项目实战&#xff0c;名字叫蚂蚁爱购。从零开发项目&#xff0c;视频加文档&#xff0c;十天就能学会开发JavaWeb项目。 教程路线是&#xff1a;搭建环境> 安装软件> 创建项目> 添加依赖和配置> 通过表生成代码> 编写Java代码&g…

测试八年|对业务测试人员的一些思考

自从事测试工作八年多以来&#xff0c;经历过三个部门多条业务线&#xff0c;也经历过测试转型再回到测试&#xff0c;在此过程中对测试工作和角色的认知也逐步有些思考&#xff0c;想把这些思考分享给大家&#xff0c;希望为业务测试同学提供一些有价值的思路。 一、质量保障…

【Leetcode】2085. 统计出现过一次的公共字符串

文章目录 题目思路代码 题目 2085. 统计出现过一次的公共字符串 思路 使用两个哈希表 words1Count 和 words2Count 分别统计两个数组中每个单词的出现次数。然后遍历 words1Count 中的每个单词&#xff0c;如果该单词在 words1 中出现了一次&#xff0c;且在 words2 中也出…

如何运用自养号测评策略在Lazada、Shopee上轻松提升销售和排名

卖家们常常会为Lazada、Shopee店铺销量不佳而感到困惑。然而&#xff0c;仅仅感叹并不能解决问题。作为卖家&#xff0c;我们需要深入分析问题&#xff0c;并采取有效的措施来解决它们。基本功是提升销量的基石&#xff0c;但仅仅依靠基本功是不够的。我们需要将运营和测评结合…

Java面试题(java高级面试题)

线程池的核心线程数设置为多大比较合理&#xff1f; Worker线程在执行的过程中&#xff0c;有一部计算时间需要占用CPU&#xff0c;另一部分等待时间不需要占用CPU&#xff0c;通过量化分析&#xff0c;例如打日志进行统计&#xff0c;可以统计出整个Worker线程执行过程中这两…

【排序算法】插入排序与希尔排序,你不想知道为什么希尔比插入更快吗?

文章目录 &#x1f680;前言&#x1f680;插入排序&#xff08;insertsort&#xff09;✈️原理✈️代码实现&#xff08;coding&#xff09; &#x1f680;总结&#x1f680;希尔排序&#xff08;shellsort&#xff09;✈️代码实现&#xff08;coding&#xff09;✈️为啥希尔…