C/C++暴力/枚举/穷举题目持续更新(刷蓝桥杯基础题的进!)

news2025/1/16 15:52:57

目录

前言

 一、百钱买百鸡

二、百元兑钞

三、门牌号码(蓝桥杯真题)

 四、相乘(蓝桥杯真题)

五、卡片拼数字(蓝桥杯真题)

六、货物摆放(蓝桥杯真题)

七、最短路径(蓝桥杯真题)

八、完数(蓝桥杯真题)


前言

  循环有while,do-while,for三种形式,三者各自可以自己嵌套自己,也可以交叉嵌套。暴力破解法(穷举法)(枚举法),即用循环把该有的结果全部遍历出来,之后再用if语句做筛选,判断这个答案是不是我们需要的,此思想在蓝桥杯竞赛中相当重要。

解决此类题目的思路:

  首先我们应该确定穷举范围,不能多,不能少,要不然就容易漏掉一个。其次想应该用什么方式穷举,单层for循环或者嵌套,然后想if的判断条件。

  下面几道例题具体展现暴力的思想,每道题均采用问题描述,分析,代码实现和运行结果的形式呈现。

 一、百钱买百鸡

问题描述:

  我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?

  翻译过来,意思是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?

分析:

  思路讲解:假设买的全为公鸡,则最能买到20只,即100/5=20,所以x<=20;同理若买的全为母鸡则100/3=33余1,y<=33;此处小心小鸡数目不是300,而应该是100,因为题目要求了要买100只鸡,所以z<=100; if语句满足三个条件:1、一百元 2、一百只鸡 3、小鸡数量是三的倍数。

代码实现:


#include<iostream>
using namespace std;

int main() {
	int x, y, z;              //分别代表公鸡,母鸡,小鸡的数量
	for (x = 0; x <= 20; x++) {
		for (y = 0; y <= 33; y++) {
			for(z=0;z<=100;z++)
			if (z % 3 == 0 && (5 * x + 3 * y + z / 3) == 100 && (x+y+z)==100) 
            //满足三个条件:1、一百元 2、一百只鸡3、小鸡数量是三的倍数
{   
				cout << "公鸡,母鸡,小鸡数:" << x << " " << y << " " << z << " " << endl;
			}
		}
	}
}

运行结果: 

二、百元兑钞

问题描述:

  一百元可以兑换多少张10元,5元,1元?有多少种兑换方法?要求每种情况都要包含10元,5元,1元。

分析:
  和第一道题思路一致,三重循环暴力破解,设置count值求解次数。

代码实现:


//百元兑钞问题
int main() {
	int a, b, c,count=0;
	for (a = 1; a < 10; a++) 
		for(b=1;b<20; b++)
			for (c = 1; c < 100; c++) 
				if (100 == a * 10 + b * 5 + c) {
					cout << "10元有:" << a << "张";
					cout << "5元有:" << b << "张";
					cout << "1元有:" << c << "张";
					cout << endl;
					count++;
					break;//提高效率,每次兑换方案成功后跳出最内层循环
				}
	cout << "共有" << count << "种兑换方法";
		return 0;
}

运行结果

三、门牌号码(蓝桥杯真题)

问题描述:

  小蓝要为一条街的住户制作门牌号。这条街一共有2020位住户,门牌号从1到2020编号。小蓝制作门牌的方法是先制作0到9这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌1017需要依次粘贴字符1、0、1、7,即需要1个字符0,2个字符1,1个字符7。请问要制作所有的1到2020号门牌,总共需要多少个字符2?

分析:

  此题比较简单,问题简化为:1~2020总共有多少个2?用到求一个数各位数字的思想,即把当前这个数每一位都拆出来。

拆解一个数的各位代码

代码实现:

int main() {
	int count = 0;
	for (int i = 1; i <= 2020; i++) {
		int n = i;
		while (n != 0) {
			int t = n % 10;
			n /= 10;
			if (t == 2)
				count++;
		}
	}
	cout<<"0~2020共有" << count<<"个2";
	return 0;
}

运行结果: 

 四、相乘(蓝桥杯真题)

问题描述:

  小蓝发现,他将 1 至 1000000007 之间的不同的数与 2021 相乘后再求除以 1000000007 的余数,会得到不同的数。
  小蓝想知道,能不能在 1 至 1000000007 之间找到一个数,与 2021 相乘后 再除以 1000000007 后的余数为 999999999。
  如果存在,请在答案中提交这个数; 如果不存在,请在答案中提交 0。

分析:  

此题非常简单,分析省略。

代码实现:

int main() {
	unsigned long long i,n=1000000007,b=999999999;
	for(i=1;i<=n;i++)
		if (i * 2021 % n == b) {
			cout << i;
		}
}

运行结果:


 

五、卡片拼数字(蓝桥杯真题)

问题描述:

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。小蓝有很多数字卡片,每张卡片上都是数字0到9。小蓝准备用这些卡片来拼一些数,他想从1开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。小蓝想知道自己能从1拼到多少。例如,当小蓝有30张卡片,其中0到9各3张,则小蓝可以拼出1到10,但是拼11时卡片1已经只有一张了,不够拼出11。现在小蓝手里有0到9的卡片各2021张,共20210张,请问小蓝可以从1拼到多少?

分析:

依旧用到上一题求一个数各位数字的思想,比较拆出来的各位数和剩余卡片数量,卡片数量不够说明拼不了这个数字,这时退出循环,最多拼到上一个数。

代码实现:

int main()
{
	int cards[10] = { 2021,2021,2021,2021,2021,2021,2021,2021,2021,2021 };
	//定义一个整数数组cards,包含了数字0到9的卡片数量,每个数字的卡片数量都是2021
	int num = 1;  //ans代表所要拼接的数字
	int temp = 0; //用另一个变量操作num
	int temp2 = 0; //拆出的各位数字
	while (1) //用一个无限循环
	{
		temp = num;
		while (temp != 0)
		//第一次写的时候忘记了这条语句,当temp=0时,对该数操作完毕
		{
			temp2 = temp % 10;
			cards[temp2]--; //对应的该卡片数量减一
			if (cards[temp2] == 0) //说明对应卡片用完
			{
				cout << num - 1 << endl; //即最大的拼接数字为上一个数字
				return 0; //循环终止
			}
			temp = temp / 10;
		}
		num++;
	}
	return 0;

运行结果:

六、货物摆放(蓝桥杯真题)

问题描述:

  小蓝有一个超大的仓库,可以摆放很多货物。现在,小蓝有n 箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。小蓝希望所有的货物最终摆成一个大的立方体。即在长、宽、高的方向上分别堆L、W、H 的货物,满足n = L × W × H。给定n,请问有多少种堆放货物的方案满足要求。
例如,当n = 4 时,有以下6 种方案:1×1×4、1×2×2、1×4×1、2×1×2、2×2×1、4×1×1。
请问,当n = 2021041820210418 (注意有16 位数字)时,总共有多少种方案?

分析:

 当n = 4 时,1×1×4、1×2×2、1×4×1、2×1×2、2×2×1、4×1×1。通过这个例子,可以看出找出n的所有因子并求出所有的组合方式,存放到数组中,再使用三重循环遍历所有因子,找出所有因子用到求素数的思想。

代码实现:

#include<iostream>
#include<cmath>
using namespace std;
typedef unsigned long long A;
//typedef 是一个类型声明语句,它用于定义一个新的数据类型标识符,给一个已有的数据类型取别名。
//即unsigned long long ==A;
 A n = 2021041820210418;
A a[3000], cnt = 0; //存放因子
int main(void)
{
	//找出所有因子放进数组,素数思想
	for (int i = 1; i <= sqrt(n); i++) {
		if (n % i == 0) {
			a[++cnt] = i;
			if (i * i != n) //简化寻找次数
				a[++cnt] = n / i;
		}
	}
	//循环
	A count = 0; //计数
	for (int l = 1; l <= cnt; l++)
		for (int w = 1; w <= cnt; w++)
			for (int h = 1; h <= cnt; h++)
				if (a[l] * a[w] * a[h] == n) 
					count++;

	cout << count;
	return 0;

}

运行结果: 

七、最短路径(蓝桥杯真题)

问题描述:

  小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图中的最短路径。小蓝的图由2021 个结点组成,依次编号1 至2021。对于两个不同的结点a, b,如果a 和b 的差的绝对值大于21,则两个结点之间没有边相连;如果a 和b 的差的绝对值小于等于21,则两个点之间有一条长度为a 和b 的最小公倍数的无向边相连。

  例如:结点1 和结点23 之间没有边相连;结点3 和结点24 之间有一条无向边,长度为24;结点15 和结点25 之间有一条无向边,长度为75。
  请计算,结点1 和结点2021 之间的最短路径长度是多少。

分析:

求最小公倍数问题以及怎样找到并更新最短路径。

代码实现:

int main()
{
    
    int f[2022];  // 数组 f[j] 存放从节点 i到节点 j 的最短路径。
    memset(f, 0, sizeof f);
    for (int i = 1; i <= 2021; i++)
    {
        for (int j = i + 1; j <= i + 21; j++) //考虑与节点 i 相差不超过 21 的节点 j。
        {
            if (j > 2021)//确保j不超出范围
                break;
            //把路径长度存储到数组中j对应的节点位置中
            if (f[j] == 0)  //如果节点 j 还没有被计算过(即 f[j] == 0),则将 f[j] 设置为从节点 i 到节点 j 的路径长度。
                f[j] = f[i] + j * i / gcd(i, j);   //j * i / gcd(i, j)为求最小公倍数
            else
                f[j] = min(f[j], f[i] + j * i / gcd(i, j)); // 如果节点j已经有计算过的路径长度,则更新 f[j] 为当前的较短路径长度。
        }
    }
    cout << f[2021] << endl;

    return 0;
}



解释上面用到的函数:

1、memset(f, 0, sizeof f); 是一个用于将数组 f 中的所有元素初始化为 0 的函数调用。memset 是 C 标准库中的一个函数,用于将一段内存区域的每个字节设置为指定值,传递数组首地址,让memset 函数知道要操作的内存区域的起始地址,以及需要操作的字节范围。这种方式常用于在程序开始时将数组或其他内存区域初始化为特定的默认值,以确保它们在使用前具有一致的初始状态。这样可以消除未初始化变量可能导致的意外结果,并提高代码的可靠性。

2、min() 函数通常用于找出两个或多个值中的最小值。它可以是标准库中的函数,也可以是用户自定义的函数,C++ 标准库中的 min() 函数可能在 <algorithm> 头文件中定义,它接受两个或多个参数,并返回这些参数中的最小值。

运行结果:

八、完数(蓝桥杯真题)

问题描述:

编写一个程序,输出2~10000之间的所有完全数。完全数是指它的各因子(除该数本身外)之和正好等于该数本身的数。例如:6 = 1 + 2 + 3,28 = 1 + 2 + 4 + 7 + 14。

分析:

与第六题的货物摆放问题类似,首先找到所有一个数的所有因子,再判断。

代码:

#include <iostream>

// 判断一个数是否为完数
bool isPerfectNumber(int number) {
    int sum = 0;
    for (int i = 1; i < number; i++) {
        if (number % i == 0) {
            sum += i;
        }
    }
    // 如果因子之和等于该数,则该数为完数
    return sum == number;
}

int main() {
    for (int i = 1; i <= 10000; i++) {
        if (isPerfectNumber(i)) {
            std::cout << i << " 是完数" << std::endl;
        }
    }
    return 0;
}

运行结果:

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

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

相关文章

【深入理解设计模式】代理设计模式

代理设计模式&#xff1a; 代理设计模式是一种结构型设计模式&#xff0c;它允许你提供一个替代物或占位符来控制对其他对象的访问。在代理模式中&#xff0c;一个类代表另一个类的功能。这种类型的设计模式属于结构型模式&#xff0c;因为该模式涉及类和对象的组合。 概述 …

【谈一谈】Redis是AP还是CP?

【谈一谈】Redis是AP还是CP? 再说这个话题之前,这里的是AP和CP不是"A片"和"C骗"啊 !~哈哈哈,就离谱,博文后面我会解释下的 我说下自己对Redis的感觉,我一直很好奇Redis,不仅仅是当缓存用那么简单,包括的它的底层设计 所以,思考再三,我决定先从Redis基础开…

最简单的基于 FFmpeg 的视音频分离器

最简单的基于 FFmpeg 的视音频分离器 最简单的基于 FFmpeg 的视音频分离器正文结果工程文件下载参考链接 最简单的基于 FFmpeg 的视音频分离器 参考雷霄骅博士的文章&#xff0c;链接&#xff1a;最简单的基于FFmpeg的封装格式处理&#xff1a;视音频分离器&#xff08;demuxe…

五种多目标优化算法(MOFA、NSWOA、MOJS、MOAHA、MOPSO)性能对比(提供MATLAB代码)

一、5种多目标优化算法简介 多目标优化算法是用于解决具有多个目标函数的优化问题的一类算法。其求解流程通常包括以下几个步骤&#xff1a; 1. 定义问题&#xff1a;首先需要明确问题的目标函数和约束条件。多目标优化问题通常涉及多个目标函数&#xff0c;这些目标函数可能…

电商风控系统(flink+groovy+flume+kafka+redis+clickhouse+mysql)

一.项目概览 电商的防止薅羊毛的风控系统 需要使用 groovy 进行风控规则引擎的编写 然后其它技术进行各种数据的 存储及处理 薅羊毛大致流程 如果单纯使用 if else在业务代码中进行风控规则的编写 那么 维护起来会比较麻烦 并且跟业务系统强绑定不合适 所以一般独立成一个单…

2024年2月20日v1.0.5更新·优雅草便民工具youyacao-tools

2024年2月20日v1.0.5更新优雅草便民工具youyacao-tools apk下载 https://fenfacun.youyacao.com/tools105.apk 介绍 优雅草便民工具是一款由成都市一颗优雅草科技有限公司打造的便民查询公益工具&#xff0c;2024年1月17日正式发布v1.0.0版本&#xff0c;本工具为了方便大众免…

贪心算法---前端问题

1、贪心算法—只关注于当前阶段的局部最优解,希望通过一系列的局部最优解来推出全局最优----但是有的时候每个阶段的局部最优之和并不是全局最优 例如假设你需要找给客户 n 元钱的零钱&#xff0c;而你手上只有若干种面额的硬币&#xff0c;如 1 元、5 元、10 元、50 元和 100…

基于相位的运动放大:如何检测和放大难以察觉的运动(01/2)

基于相位的运动放大&#xff1a;如何检测和放大难以察觉的运动 目录 一、说明二、结果的峰值三、金字塔背景3.1 可操纵金字塔3.2 亚倍频程复数可控金字塔 四、基本方针4.1 1D 问题陈述4.2 一维方法4.3 实际实施说明 五、放大倍率的限制5.1 空间支持的影响5.2 频带的影响 六、推…

SpringBoot3整合Swagger3,访问出现404错误问题(未解决)

秉承着能用就用新的的理念&#xff0c;在JDK、SpringBoot、SpringCloud版本的兼容性下&#xff0c;选择了Java17、SpringBoot3.0.2整合Swagger3。 代码编译一切正常&#xff0c;Swagger的Bean也能加载&#xff0c;到了最后访问前端页面swagger-ui的时候出现404。 根据网上资料…

【计算机网络】传输层——TCP和UDP详解

文章目录 一. TCP和UDP简介二. UDP 协议详解1. UDP报文格式2. UDP的使用场景 三. TCP 协议详解1. TCP报文格式2. TCP协议的重要机制确认应答&#xff08;保证可靠传输的最核心机制&#xff09;超时重传连接管理&#xff08;三次握手、四次挥手&#xff09;&#xff01;&#xf…

React组件通讯

组件通讯 组件是一个独立的单元&#xff0c;默认情况下组件只能自己使用自己的数据。在组件化过程中&#xff0c;我们将一个完整的功能拆分成多个组件&#xff0c;便于更好的完成整个应用的功能。 Props 组件本来是封闭的&#xff0c;要接受外部数据应该可以通过Props来实现…

Jmeter学习系列之八:控制器Controllers 的入门介绍

一、Controllers 简介 Jmeter有两种类型的控制器&#xff1a;Samplers&#xff08;取样器&#xff09;和Logical Controllers&#xff08;逻辑控制器&#xff09;&#xff1b;它们驱动着测试的进行取样器&#xff1a;让jmeter发送请求到服务器以及接收服务器的响应数据逻辑控制…

三种方法用c语言求最大公约数以及最小公倍数

学习目标&#xff1a; 掌握求最大公约数&#xff08;最小公倍数&#xff09;的三种基本方法 学习内容&#xff1a; 1.一大一小取其小&#xff0c;剖根问底取公约 意思是从一大一小两个数当中&#xff0c;我们取较小的那个数&#xff08;min&#xff09;进行剖析&#xff0c;试…

Socket、UDP、TCP协议和简单实现基于UDP的客户端服务端

目录 Socket TCP和UDP区别 UDP&#xff1a;无连接&#xff0c;不可靠传输&#xff0c;面向数据报&#xff0c;全双工 TCP&#xff1a;有连接&#xff0c;可靠传输&#xff0c;面向字节流&#xff0c;全双工 无连接和有连接 可靠传输和不可靠传输 面向数据报和面向字节流…

pclpy 最小二乘法拟合平面

pclpy 最小二乘法拟合平面 一、算法原理二、代码三、结果1.左边原点云、右边最小二乘法拟合平面后点云投影 四、相关数据 一、算法原理 平面方程的一般表达式为&#xff1a; A x B y C z D 0 ( C ≠ 0 ) Ax By Cz D 0 \quad (C\neq0) AxByCzD0(C0) 即&#xff1a; …

【深度学习笔记】 3_13 丢弃法

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 3.13 丢弃法 除了前一节介绍的权重衰减以外&#xff0c;深度学习模型常常使用丢弃法&#xff08;dropout&#xff09;[1] 来应对过拟合…

HDL FPGA 学习 - Quartus II 工程搭建,ModelSim 仿真,时序分析,IP 核使用,Nios II 软核使用,更多技巧和规范总结

目录 工程搭建、仿真与时钟约束 一点技巧 ModelSim 仿真 Timing Analyzer 时钟信号约束 SignalTap II 使用 In-System Memory Content Editor 使用 记录 QII 的 IP 核使用 记录 Qsys/Nios II 相关 记录 Qsys 的 IP 核使用 封装 Avalon IP 更多小技巧教程文章 更多好…

【C语言】linux内核ipoib模块 - ipoib_tx_poll

一、中文注释 这段代码是 Linux 内核网络栈中与 InfiniBand 协议相关的一个部分&#xff0c;特别是与 IP over InfiniBand (IPoIB)相关。该函数负责去处理IPoIB的发送完成队列&#xff08;发送CQ&#xff09;上的工作请求&#xff08;work completions&#xff09;。以下是对这…

前后端分离Vue+ElementUI+nodejs蛋糕甜品商城购物网站95m4l

本文主要介绍了一种基于windows平台实现的蛋糕购物商城网站。该系统为用户找到蛋糕购物商城网站提供了更安全、更高效、更便捷的途径。本系统有二个角色&#xff1a;管理员和用户&#xff0c;要求具备以下功能&#xff1a; &#xff08;1&#xff09;用户可以修改个人信息&…

YOLO系列论文阅读(v1--v3)

搞目标检测&#xff0c;绕不开的一个框架就是yolo&#xff0c;而且更糟糕的是&#xff0c;随着yolo的发展迭代&#xff0c;yolo网络可以做的事越来越多&#xff0c;语义分割&#xff0c;关键点检测&#xff0c;3D目标检测。。。这几天决定把YOLO系列彻底梳理一下&#xff0c;在…