蓝桥杯 枚举算法 (c++)

news2024/12/29 9:23:04

在这里插入图片描述

枚举就是根据提出的问题,——列出该问题的所有可能的解,并在逐一列出的过程中,检验每个可能解是否是问题的真正解,
如果是就采纳这个解,如果不是就继续判断下一个。
枚举法一般比较直观,容易理解,但由于要检查所有的可能解,因此运行效率较低。
能够用枚举法解决的题目往往是最简单的一类题目。这种题具有以下特点:
·解枚举范围是有穷的。
·检验条件是确定的。

先来看一个简单的问题。
某君说:“我的年龄是个两位数,我比儿子大27岁,如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄”
请你计算:某君的年龄一共有多少种可能情况?
我们来分析一下这道题。题里给出某君的年龄是两位数,那么年龄的取值范围是[10,99]内的整数。
检验条件也是确定的,只要把枚举的年龄的个位与十位交换,如果发现比原数字刚好小27,那么它就是真正的解。
以上的解决思路就是枚举法的一个例子。

#include<iostream>
using namespace std;
int main(){
	int total=0;//记录可能解的个数 
	for(int i=10;i<=99;i++){//枚举年龄范围 
		if(i=(i%10)*10+i/10+27){
			total++;}
	}
	cout<<total<<endl;
	return 0;
}

在这里插入图片描述
在判断条件中,我们通过对10取模的方式来获取一个数的个位数。用除10的方法来获取一个数的十位数。(在程序中整型数字与整型数字相除表示整除,所以除10会让数字的个位数字被舍去,其余的十进制每一位向右移动一位。)
这道题是第七届蓝桥杯C/C++语言A组的题目。

前面的课程里,我们已经学习了如何输出1到100
范围内的所有质数。接下来,我们要实现输出n到m之间所有质数的程序。n,m保证为正整数。
首先,我们肯定需要定义并读入两个整数n,m,把

int n;

修改为:

int n,n;
cin>>n>>m;

并将外层循环结构改为

for(int j=n;j<=m;j++){

}
#include<iostream>
using namespace std;
int main(){
	int n,m;
	cin>>n>>m;
	for(int j=n;j<=m;j++){
			if(j==1){
				continue;
			}
		bool is_prime=true;
		for(int i=2;i<j;i++){
			if(j%i==0){
				is_prime=false;
				break;
			}
		}
		if(is_prime){
			cout<<j<<endl;
		}
	}
	return 0;
}

在这里插入图片描述

观察数字:12321,123321都有一个共同的特征,就是无论从左到右读还是从右向左读,都是相同的。这样的数字叫做回文数字。
现在要从5位或6位的十进制数字中找出各个数位之和等于n的回文数字。
输入格式
输入一个整数n(10≤n≤100)。
输出格式
输出所有各个数位之和等于n的5位和6位整数,每个数字占一行,
数字按从小到大的顺序排列。如果没有满足条件的数字,则输出-1.
样例输入

48

样例输出

699996
789987
798897
879978
888888
897798
969969
978879
987789
996699
#include<iostream>
using namespace std;
int n;
int digit[6];
bool judge(int x){
	int m=0,sum=0;
	while(x){
		digit[m++]=x%10;
		sum+=x%10;
		x/=10;
	}
	if(sum!=n){
		return false;
	}
	for(int i=0;i<m/2;i++){
		if(digit[i]!=digit[m-1-i]){
			return false;
		}
		}
		return true;
	}
	int main(){
		bool f = false;
		cin>>n;
		for(int i=10000;i<1000000;i++){
			if(judge(i)){
				cout<<i<<endl;
				f=true;
			}
		}
		if(!f){
			cout<<-1<<endl;
		}
		return 0;
	}

在这里插入图片描述

如果一个4位数,它的每个位上的数字的4次幕之和等于它本身,那么我们就称这个数字为一个四叶玫瑰数。现在,我们要求出n以内所有的四叶玫瑰数。
首先,我们读入了一个整数n,由于四叶玫瑰数一定是个四位数,那我们首先将其它位数的数字排除,请在return 0;之前写:

if(n<1000||n>9999){
	cout<<"error!";
}else{
	
}

接下来,我们要依次枚举从1000开始到n之间的数字,哪些符合四叶玫瑰数的要求,并将它输出。在这里,我们将判断四叶玫瑰数的代码封装成一个自己定义的函数rose,我们先在else分支中写:

for(int i=1000;i<=n;i++){
	if(rose(i)){
		cout<<i<<endl;
	}
}

输入一个四位数n,看看1000到n之间有没有四
叶玫瑰数吧。
·事实上,一共有三个四叶玫瑰数,他们分别是
1634,8208,9474

#include<iostream>
#include<cmath>
using namespace std;
bool rose(int i){
	int a=i/1000,b=i/100%10,c=i/10%10,d=i%10;
	int ans=a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d;
	if(ans==i){
		return true;
	}else{
		return false;
	}
}
int main(){
	int n;
	cin>>n;
	if(n<1000||n>9999){
		cout<<"error!";
	}else{
		for(int i=1000;i<=n;i++){
			if(rose(i)){
				cout<<i<<endl;
			}
		}
	}
}

在这里插入图片描述
某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。现在算起来,他一共吹熄了236根蜡烛。那么,他从几岁开始过生日party的。从常识来讲一个人的年龄不可能超过200岁。
因此,我们需要枚举这个人的开始过生日的年龄,
从0到200,请在return 0:之前写:

for(int i=1;i<=200;i++){
	
}

接下来,我们需要依次枚举他从某岁到某岁之间会吹多少蜡烛。如果这个数目超过236,我们就不关心了;同时,我们并不知道这中间过了多少岁,所以无法确定循环次数,因此这里使用while循环更合适,请在for循环中写:

int can=0,j=i;
while(can<236&&j<=200){
	can+=j;
	j++;
}

其中,变量can用于记录蜡烛数目,j是一个累加变量。

跳出while循环后,如果蜡烛的数目恰好等于236
,说明枚举条件成立,变量的值就是他开始过
生日时的年龄。
请接着写:

if(can==236){
	cout<<i<<endl;
}

其中,变量can用于记录蜡烛数目,j是一个累加变量。
运行一下,看看结果是不是26。
想一想,如果我们还想知道他今年多少岁,应该怎
么做呢?

#include<iostream>
using namespace std;
int main(){
	for(int i=1;i<=200;i++){
		int can=0,j=i;
		while(can<236&&j<=200){
			can+=j;
			j++;
		}
		if(can==236){
			cout<<i<<endl;
		}
	}
	return 0;
} 

在这里插入图片描述
有些人很迷信数字,比如认为带4的数不吉利。某抽奖活动的奖券号码是5位数(10000-99999),要求其中不要出现带“4”的
号码,主办方想让你计算一下,如果发行号码n到m之间的奖券,在任何两张奖券都不重复的情况下,可以发行多少张?
输入格式
输入为一行,为两个空格隔开的整数n,m,
10000 <=n <=m <=99999.
输出格式
输出为一个整数,为可发出奖券的数目。
样例输入

10000 99999

样例输出

52488
#include<iostream>
using namespace std;
bool judge(int x){
	while(x){
		if(x%10==5){
			return true;
		}
		x/=10;
	}
	return false;
}
int main(){
	int n,m,cnt=0;
	cin>>n>>m;
	for(int i=n;i<=m;i++){
		if(!judge(i)){
			cnt++;
		}
	}
	cout<<cnt<<endl;
	return 0;
}

在这里插入图片描述

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

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

相关文章

python+django医患档案电子病历管理系统7ld2o

本课题使用Python语言进行开发。代码层面的操作主要在PyCharm中进行&#xff0c;将系统所使用到的表以及数据存储到MySQL数据库中&#xff0c;方便对数据进行操作本课题基于WEB的开发平台 1.运行环境&#xff1a;python3.7/python3.8。 2.IDE环境&#xff1a;pycharmmysql5.7; …

从Docker初识K8S

什么是Docker&#xff1f; 假设现在有一个服务场景&#xff0c;你是一个程序猿&#xff0c;你编写代码实现一个机器人喝水的功能&#xff0c;然后你需要将这份代码部署到每个机器人身上&#xff0c;你部署的时候需要一个个安装代码所需的依赖包&#xff0c;然后运行测试你的代码…

面向C++模块的开源 IFC SDK

早在 VS2019 v16.10 版本的时候&#xff0c;我们就官宣了对 C 模块(以及几乎所有其他 C 20 特性)的全面支持&#xff0c;包括 MSVC 编译器工具集&#xff0c;静态分析&#xff0c;智能感知和调试器等&#xff0c;而实现模块需要将 C 代码实现为一种内部的临时表示形式。 今天&…

【苍穹外卖 | 项目日记】第四天

前言&#xff1a; 今天状态还可以&#xff0c;既有自己实战独立写接口&#xff0c;又听了课&#xff0c;学习了新的知识 目录 前言&#xff1a; 今日完结任务&#xff1a; 今日收获&#xff1a; 实现店铺状态接口 杂项知识点&#xff1a; 总结&#xff1a; 今日完结任务…

华为9.20笔试 复现

第一题 丢失报文的位置 思路&#xff1a;从数组最小索引开始遍历 #include <iostream> #include <vector> using namespace std; // 求最小索引值 int getMinIdx(vector<int> &arr) {int minidx 0;for (int i 0; i < arr.size(); i){if (arr[i] …

重新认识面向对象

一、重新认识面向对象 1、重新认识面向对象1.1、理解隔离的变化1.2、各司其职1.3、对象是什么 2、面向对象设计基本原则&#xff08;八个原则&#xff09;先介绍分而治之的思想构造类介绍抽象类的方法构造类2.1、依赖倒置原则(DIP )2.2、开放封闭原则(OCP )2.3、单一职责原则&a…

推荐《咒术回战》

电视动画片《咒术回战》改编自芥见下下著作的同名漫画作品&#xff0c;于2019年11月25日宣布电视动画化的消息 [1] &#xff0c;该系列由MAPPA负责制作。第1期于2020年10月3日—2021年3月27日播出 [8] &#xff0c;全24集。 动画电影《咒术回战 0》于2021年3月27日宣布制作决…

实施 DevSecOps 最佳实践

DevSecOps 是一个框架&#xff0c;它将开发 (Dev)、IT 运营 (Ops) 和安全 (Sec) 流程的实践融合到一个简化的流程中。使用这种方法&#xff0c;DevSecOps 团队能够确保将安全性集成到软件开发生命周期中&#xff0c;确保以“安全第一”的心态构建、部署和维护软件。在本教程中&…

自动驾驶学习笔记(四)——变道绕行仿真

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《2023星火培训【感知专项营】》免费课程—>传送门 文章目录 前言 仿真内容 启动Dreamview 开启Sim…

网络安全(黑客技术)——如何高效自学

前言 前几天发布了一篇 网络安全&#xff08;黑客&#xff09;自学 没想到收到了许多人的私信想要学习网安黑客技术&#xff01;却不知道从哪里开始学起&#xff01;怎么学&#xff1f;如何学&#xff1f; 今天给大家分享一下&#xff0c;很多人上来就说想学习黑客&#xff0c…

ChatGPT AIGC 实现数据分析可视化三维空间展示效果

使用三维空间图展示数据有以下一些好处&#xff1a; 1可视化复杂性&#xff1a;三维图可以展示三个或更多的变量&#xff0c;一眼就能看出数据各维度之间的关系&#xff0c;使复杂数据的理解和分析变得更为直观。 2检测模式和趋势&#xff1a;通过三维图&#xff0c;用户可以…

从零开始的stable diffusion

stable diffusion真的是横空出世&#xff0c;开启了AIGC的元年。不知你是否有和我一样的困惑&#xff0c;这AI工具好像并不是那么听话&#xff1f; 前言 我们该如何才能用好stable diffusion这个工具呢&#xff1f;AI究竟在stable diffusion中承担了什么样的角色&#xff1f;如…

单片机综合小项目

一、单片机做项目常识 1.行业常识 2.方案选型 3.此项目定位和思路 二、单片机的小项目介绍 1.项目名称&#xff1a;基于51单片机的温度报警器 &#xff08;1&#xff09;主控&#xff1a;stc51&#xff1b; &#xff08;2&#xff09;编程语言&#xff1a;C语言 &#xff08;…

数据结构 优先级队列(堆)

数据结构 优先级队列(堆) 文章目录 数据结构 优先级队列(堆)1. 优先级队列1.1 概念 2. 优先级队列的模拟实现2.1 堆的概念2.2 堆的存储方式2.3 堆的创建2.3.1 堆向下调整2.3.2 堆的创建2.3.3 建堆的时间复杂度 2.4 堆的插入与删除2.4.1 堆的插入2.4.2 堆的删除 2.5 用堆模拟实现…

基于微服务+Java+Spring Cloud开发的建筑工地智慧平台源码 云平台多端项目源码

建筑工地智慧平台源码&#xff0c;施工管理端、项目监管端、数据大屏端、移动APP端全套源码 技术架构&#xff1a;微服务JavaSpring Cloud VueUniApp MySql自主版权实际应用案例演示 建筑工地智慧平台已应用于线上巡查、质量管理、实名制管理、危大工程管理、运渣车管理、绿色…

非连续分配管理方式之基本分页存储管理

连续分配&#xff1a;为用户进程分配的必须是一个连续的内存空间。 非连续分配&#xff1a;为用户进程分配的可以是一些分散的内存空间。 基本分页存储管理的思想∶把进程分页&#xff0c;各个页面可离散地放到各个的内存块中。 1.分页存储 1.内存空间分区 将内存空间分为一…

数据库 MySql快速导入外部数据库流程

适用于新安装MySql本地没有数据情况 外部MySql数据库文件 任务管理器停用Mysql进程 将外部文件替换本地默认文件即可 重启电脑导入完成。

MyLife - Docker安装rabbitmq

Docker安装rabbitmq 个人觉得像rabbitmq之类的基础设施在线上环境直接物理机安装使用可能会好些。但是在开发测试环境用docker容器还是比较方便的。这里学习下docker安装rabbitmq使用。 1. rabbitmq 镜像库地址 rabbitmq 镜像库地址&#xff1a;https://hub.docker.com/_/rabbi…

并联谐振DCDC变换器的设计与仿真

摘 要 在我们日常生活中&#xff0c;并联谐振变换器随处可见&#xff0c;因为其相比其他变换器而言结构相对简单&#xff0c;运行稳定且便于维修等优势&#xff0c;最重要的是并联谐振变换器在并网方面具有很好的优势。随着自动控制技术和微电子技术的不断革新&#xff0c;目前…

并联机器人结构分析与领域应用

并联机器人早在20世纪的90年代就已经崭露头角&#xff0c;具有刚度高、速度快、柔性强、重量轻等优点&#xff0c;是工业机器人的新生代力量。并联机器人与串联机器人一起构成了工业机器人的重要部分。在食品、医药、电子等轻工业中应用最为广泛&#xff0c;在物料的搬运、包装…