枚举问题刷题

考研机试题目中的很多问题往往能通过暴力方法来求解,这些题目并不需要进行过多的思考,而只需枚举所有可能的情况,或者模拟题目中提出的规则,便可以得到解答。虽然说这种方法看上并不高明,但对于一些简单的题目来说却是行之有效的好策略。

枚举

枚举是指对每个可能的解进行逐一判断,直到找到符合题目要求的答案。枚举类的题目本身并不复杂,但在采取枚举策略之前, 一定要好好分析题目的枚举量,枚举量过大时, 需要选择其他解决方法。即使问题适合用枚举策略来求解,也最好对题目进行一定的分析,以便通过减少部分无效的枚举来使得程序更加简洁和高效。

下面通过几道例题来感受一下:

abc_牛客题霸_牛客网 (nowcoder.com)icon-default.png?t=N7T8https://www.nowcoder.com/practice/912b15e237ef44148e44018d7b8750b6?tpId=60&tqId=29487&tPage=1&ru=/kaoyan/retest/1001&qru=/ta/tsing-kaoyan/question-ranking题解:

#include<iostream>
using namespace std;
int main()
{for (int a = 0; a <= 9; a++){for (int b = 0; b <= 9; b++){for (int c = 0; c <= 9; c++){//abc+bcc=532if (a * 100 + b * 10 + c + b * 100 + c * 10 + c == 532){cout << a <<" "<< b << " "<< c << endl;}}}}return 0;
}

反序数_牛客题霸_牛客网 (nowcoder.com)icon-default.png?t=N7T8https://www.nowcoder.com/practice/e0d06e79efa44785be5b2ec6e66ba898?tpId=60&tqId=31035&tPage=2&ru=/kaoyan/retest/1001&qru=/ta/tsing-kaoyan/question-ranking图解求逆序数的过程:

方法一:

#include<iostream>
using namespace std;
int Reverse(int n) { //封装一个求逆序数的函数int remain = 0;int reverse = 0;while (true) {remain = n % 10;n = n / 10;reverse = reverse * 10 + remain;if (n == 0) {break;}}return reverse;
}
int main() {for (int a = 1; a <= 9; a++) {for (int b = 0; b <= 9; b++) {for (int c = 0; c <= 9; c++) {for (int d = 0; d <= 9; d++) {int n = a * 1000 + b * 100 + c * 10 + d;if (n * 9 == Reverse(n)) {cout << a << b << c << d << endl;}}}}}return 0;
}

方法二(有一点投机取巧):

#include<iostream>
using namespace std;int main()
{for (int a = 0; a <= 9; a++){for (int b = 0; b <= 9; b++){for (int c = 0; c <= 9; c++){for (int d = 0; d <= 9; d++){if ((a * 1000 + b * 100 + c * 10 + d) * 9 == (d * 1000 + c * 100 + b * 10 + a)){if (a == 0 && b==0 && c==0 && d==0){;}else{cout << a << b << c << d << endl;}}}}}}return 0;
}

对称平方数1_牛客题霸_牛客网 (nowcoder.com)icon-default.png?t=N7T8https://www.nowcoder.com/practice/a84d46d5321f4e20931cb725e6c74fad?tpId=60&tqId=31036&tPage=2&ru=%2Fkaoyan%2Fretest%2F1001&qru=%2Fta%2Ftsing-kaoyan%2Fquestion-ranking题解:

#include<iostream>
using namespace std;int Reverse(int n) { //封装一个求逆序数的函数int remain = 0;int reverse = 0;while (true) {remain = n % 10;n = n / 10;reverse = reverse * 10 + remain;if (n == 0) {break;}}return reverse;
}
int main() {for (int i = 0; i <= 256; i++) {int n = i * i;if (n == Reverse(n)) { //通过if条件来判断这个数是否具有对称性cout << i << endl;}}return 0;
}

与7无关的数__牛客网 (nowcoder.com)icon-default.png?t=N7T8https://www.nowcoder.com/questionTerminal/776d401bf86d446fa783f0bef7d3c096

#include <iostream>
using namespace std;
bool Is_a_seven(int i)//封装成函数判断一个数中是否含有7,这样做的好处是避免一个函数循环过大
{int remain = 0;while (i){remain = i % 10;if (remain == 7){return true;}i = i / 10;}return false;
}
int main() {int n = 0;int sum = 0;//表示和cin >> n;for (int i = 1; i <= n; i++){//与7相关的数要满足的条件://1.能被7整除if (i % 7 == 0){continue;//只跳过本次循环,用continue跳出}//2.数中是否含有7if (Is_a_seven(i)){continue;}sum = sum + i * i;}//输出:所有小于等于n的与7无关的数的平方和cout << sum << endl;
}

http://t.cn/E9ldhruicon-default.png?t=N7T8http://t.cn/E9ldhru

此题容易出错:

解法一:避免小数的出现会引发向下取整这样的错误,那么同时都×3

#include<iostream>
using namespace std;int main() {int n = 0;cin >> n;for (int x = 0; x <= 100; x++) {for (int y = 0; y <= 100; y++) {for (int z = 0; z <= 100; z++) {主要是1/3搞不好会变为0//所以想着全部×3 避免1/3的出现if ((x + y + z == 100) && (15 * x + 9 * y + z <= 3 * n)) {cout << "x=" << x << ",y=" << y << ",z=" << z << endl;}}}}return 0;
}

解法2:利用强制类型转换,转换为double类型

#include<iostream>
using namespace std;int main() {int n = 0;cin >> n;for (int x = 0; x <= n / 5; x++) {for (int y = 0; y <= n / 3; y++) {for (int z = 0; z <= 3 * n; z++) {if ((x + y + z == 100) && (5 * x + 3 * y + (double)1 / 3 * z <= n)) {cout << "x=" << x << ",y=" << y << ",z=" << z << endl;}}}}return 0;
}

解法3:分数用1.0/3来表示

#include<iostream>
using namespace std;int main() {int n = 0;cin >> n;for (int x = 0; x <= n / 5; x++) {for (int y = 0; y <= n / 3; y++) {for (int z = 0; z <= 3 * n; z++) {if ((x + y + z == 100) && (5 * x + 3 * y + 1.0 / 3 * z <= n)) {cout << "x=" << x << ",y=" << y << ",z=" << z << endl;}}}}return 0;
}

通过此题要知道一个常识:

如果这个题目在处理1/3这个地方的时候不将数据强制类型转换成浮点类型,那么1/3的结果永远都是0,以后在处理这类问题的时候一定要注意,1/3以后尽量都用1.0/3来表示最好

Old Bill__牛客网 (nowcoder.com)icon-default.png?t=N7T8https://www.nowcoder.com/questionTerminal/17a30153e092493e8b4d13f321343927

#include <iostream>
using namespace std;int main() {int n, x, y, z;int flag = 0;while (cin >> n >> x >> y >> z){flag = 0;for (int i = 9; i >= 1; i--) //i是最高位,j是最低位,分别从9往下循环{for (int j = 9; j >= 0; j--){if ((10000 * i + 1000 * x + 100 * y + 10 * z + j) % n == 0)确保单价是整数{flag = 1;//将flag位置为1,目的是让程序可以退出下一层循环cout << i << " " << j << " " << (10000 * i + 1000 * x + 100 * y + 10 * z + j) / n << endl;break;//退出内层for循环}}if (flag == 1)//如果flag位是1.说明以及找到一组最大的满足结果的数,直接退出循环{break;}}if (flag == 0)//如果标志位遍历完成后还是0,则输出0{cout << 0 << endl;}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言小游戏之扫雷

目录 一&#xff1a;游戏设计理念及思路 二&#xff1a;初步规划的游戏界面 三&#xff1a;开始扫雷游戏的实现 注&#xff1a;1.创建三个文件&#xff0c;test.c用来测试整个游戏的运行&#xff0c;game.c用来实现扫雷游戏的主体&#xff0c;game.h用来函数声明和包含头文…

计算一个4+3的结构变换问题

4a13 3a6 1 0 0 0 0 0 0 0 1 0 0 → ← 1 1 1 0 0 1 0 0 0 0 0 0 0 1 平面上有4个点由左向右运动&#xff0c;彼此之间保持4a13的结构&#xff0c;4个点既不在同一行&#xff0c;也不在同一列。还有3个点从右向左运动&#xff0c;保持3a6的结构&a…

【LeetCode: 12. 整数转罗马数字 + 模拟 + 有序表】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

springboot集成COS对象存储

1.申请腾讯云存储桶 新建密钥&#xff08;后面配置要用到&#xff09; 2.编写工具类 此处使用工具类进行基本属性配置&#xff0c;也可选择在yml中配置 package com.sfy.util;import com.qcloud.cos.COSClient; import com.qcloud.cos.ClientConfig; import com.qcloud.cos.a…

一位CSGO游戏搬砖人的自白

“阿阳&#xff0c;游戏搬砖这个项目是不是需要大量本金&#xff1f;需要花费大量的时间和精力&#xff1f;必须用到手机和电脑是吗&#xff1f;有没有只用一部手机一天花两三小时就能赚钱的项目推荐呢&#xff1f; 这是我最不喜欢听到的粉丝发来的聊天开场白。 反问一下自己…

免费在线压缩图片网站分享

支持批量压缩处理&#xff0c;但需要注意&#xff0c;网站仅仅支持体积为5MB的图片&#xff0c;压缩率高达66%&#xff0c;压缩完成后&#xff0c;点下Donwnload all&#xff0c;就能将图片保存至本地。 网页端直接进行图片压缩 https://tinify.cn/

热烈祝贺中玺汇集团《沃购拼》上市盛典圆满成功

鼓乐喧天&#xff0c;舞姿优美&#xff0c;一群用热情点燃生活的舞者拉开了上市盛典序幕。 《沃购拼》品牌应急生态平台&#xff0c;在科技与创新的驱动下&#xff0c;中玺汇集团在市场中崭露头角&#xff0c;今日我们迎来了一个历史性的时刻——中玺汇集团“沃购拼”品牌在香港…

基于线程池的TCP套接字通信

基于线程池的TCP套接字通信 还是只改变server.cpp 其中main函数, 也就是主线程中的处理流程: 创建监听的套接字绑定IP和端口设置监听创建线程池实例对象添加监听任务 acceptConn主线程退出 监听任务函数的处理流程如下: 阻塞等待并接受客户端连接检测有客户端连接时, 添加…

flutter3使用dio库发送FormData数据格式时候的坑,和get库冲突解决办法

问题描述 问题1&#xff1a;当你使用FormData.from(Flutter3直接不能用)的时候&#xff0c;可能会提示没有这个方法&#xff0c;或者使用FormData.fromMap(flutter3的dio支持)的时候也提示没有&#xff0c;这时候可能就是和get库里面的Formdata冲突了 问题1&#xff1a;The me…

【Linux】第三十二站:命名管道

文章目录 一、命名管道介绍二、编码1.mkfifo2.unlink3.一个简单的例子4.修改 一、命名管道介绍 管道应用的一个限制就是只能在具有共同祖先&#xff08;具有亲缘关系&#xff09;的进程间通信。 如果我们想在不相关的进程之间交换数据&#xff0c;可以使用FIFO文件来做这项工作…

​第14节-高质量简历写作求职通关-在线测试

在线测试主要包括性格测试、综合能力测试、技能测试三类 性格测试 性格测试主要用于考察个人与工岗位的匹配程度 考察内容包含性格、能力、动机、价值观等&#xff0c;考察形式一般为给出相应的工作场景&#xff0c;让你选择最喜欢或者最不喜欢的答案 技能考试 这类测试一般是针…

数学建模--PageRank算法的Python实现

文章目录 1. P a g e R a n k PageRank PageRank算法背景2. P a g e R a n k PageRank PageRank算法基础2.1. P a g e R a n k PageRank PageRank问题描述2.2.有向图模型2.3.随机游走模型 3. P a g e R a n k PageRank PageRank算法定义3.1. P a g e R a n k PageRank PageRank…