16行代码AC_蓝桥杯 2017年C组第三题 算式900(暴力解法+DFS解法)
励志用更少的代码做更高效的表达
题目描述:
小明的作业本上有道思考题:
看下面的算式:
(□□□□-□□□□)*□□=900
其中的小方块代表0~9
的数字,这10个方块刚好包含了0~9中的所有数字。
注意:0不能作为某个数字的首位。
小明经过几天的努力,终于做出了答案!如下:
(5012-4987)*36=900
用计算机搜索后,发现还有另外一个解,本题的任务就是:请你算出这另外的一个解。
解法一:全排列
这是一道非常经典的全排列类型题!这是一道非常经典的全排列类型题!!这是一道非常经典的全排列类型题!!!
几种分析思路
1 使用多重for循环+判断。 代码量大,且容易出错,10个元素之间互相判定不重复非常非常复杂。 放弃。
2 使用全排列函数。 具体函数的使用方法见博客:传送门
使用全排列函数可以让我们拥有各个位数不相等的十个数字的所有组合! 因此我们只需判断0是否在第一位即可!
代码展示
#include<bits/stdc++.h>
using namespace std;
int main() {int a[10] = {0,1,2,3,4,5,6,7,8,9};int num = 0;do{if(a[0]!=0 && a[4]!=0 && a[8]!=0) {int x1 = a[0]*1000+a[1]*100+a[2]*10+a[3];int x2 = a[4]*1000+a[5]*100+a[6]*10+a[7];int x3 = a[8]*10+a[9];if((x1-x2)*x3==900)printf("(%d-%d)*%d=900\n", x1, x2, x3);}}while(next_permutation(a, a+10));cout << num;
return 0; }
解法二:DFS
本题也可以使用DFS解题, 但并不是叫我们在考场中使用DFS,而是让初学者利用这道简单的题,加深对DFS使用的熟练程度。 (大佬请自动忽略)
DFS没啥好说的,就是模板 。 直接上代码
#include<bits/stdc++.h>
using namespace std;
int a[10];
int vis[10]; void dfs(int step) {if(step == 10) {if(a[0]!=0 && a[4]!=0 && a[8]!=0) {int x1 = a[0]*1000 + a[1]*100 + a[2]*10 + a[3];int x2 = a[4]*1000 + a[5]*100 + a[6]*10 + a[7];int x3 = a[8]*10 +a[9];if((x1-x2)*x3==900) printf("(%d-%d)*%d=900\n", x1, x2, x3);}} else for(int i = 0; i < 10; i++) if(!vis[i]) {vis[i] = 1;a[step] = i;dfs(step+1);vis[i] = 0;}
}int main() {dfs(0);
return 0; }
总结与思考
1 蓝桥杯的绝大多数题素有搜索与暴力杯之称,因此对于本题罗列的两种解法:全排列(暴力法)和dfs(搜索法),一定要牢牢掌握!每年真题都有涉及!
2 最重要的一点,我们的目的是解题, 不是炫技! 实用才是王道!
16行代码AC_蓝桥杯 2017年C组第三题 算式900(暴力解法+DFS解法)相关推荐
- 25行代码AC_蓝桥杯 2017A组省赛第九题 分巧克力(暴力优化)
励志用少的代码做高效表达 题目描述 儿童节那天有K位小朋友到小明家做客.小明拿出了珍藏的巧克力招待小朋友们. 小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形. 为了公平起见,小明需 ...
- 【已解决】蓝桥杯 2017年C组第五题 杨辉三角(分析与总结)
励志用少的代码做高效表达 题目描述: 杨辉三角也叫帕斯卡三角,在很多数量关系中可以看到,十分重要. 第0行: 1 第1行: 1 1 第2行: 1 2 1 第3行: 1 3 3 1 第4行: 1 4 6 ...
- 【解题报告+通法】_九宫幻方 蓝桥杯 2017年C组第八题(dfs解法)
题目描述 小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行.每一列和每一条对角线的和都是相同的. 三阶幻方又被 ...
- 24行代码AC_蓝桥杯2019省赛 试题 D: 数的分解
问题描述 把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包 含数字 2 和 4,一共有多少种不同的分解方法? 注意交换 3 个整数的顺序被视为同一种方法,例如 1000+10 ...
- 2020年第11届蓝桥杯省赛Python组(真题+解析+代码):数字三角形
大家好,我是爱分享的小蓝,欢迎交流指正~ 1 真题 输入 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 输出 27 2 解析 难度系数:⭐⭐ 考察题型:动态规划 涉及知识点:模块 ...
- 【蓝桥杯练习】B组结果填空题13-18------更新中
[2013年B组] 2.标题: 马虎的算式 小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了. 有一次,老师出的题目是:36 x 495 = ? 他却给抄成了:396 x 45 = ...
- 2018年第九届蓝桥杯国赛B组C++真题汇总
1. 换零钞 x星球的钞票的面额只有:100元,5元,2元,1元,共4种. 小明去x星旅游,他手里只有2张100元的x星币,太不方便,恰好路过x星银行就去换零钱. 小明有点强迫症,他坚持要求200元换 ...
- 2018年第九届蓝桥杯C/C++A组省赛 题面部分题解
第一题 标题:分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + - 每项是前一项的一半,如果一共有20项, 求这个和是多少,结果用分数表示出来. 类似: 3/2 当然,这只是加了前2 ...
- 2018年蓝桥杯省赛B组C++真题
1. 第几天 2000年的1月1日,是那一年的第1天. 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容. 2. 明码 汉字的字形存在于字库中,即便在今 ...
最新文章
- 【堆】堆的基本操作总结
- 【WC2016】挑战NPC 【带花树】【建图】
- STL容器的capacity()和reserve()演示-----vector
- python为什么import不了_python – 为什么PyImport_Import无法从当前目录加载模块?
- 域内计算机策略应用顺序
- asp.net membership 配置错误
- 小波分解、去噪、时频分析画图
- 使用奇妙清单:轻松搞定家庭计划事项同步管理
- python rgb565_RGB565的转换
- python读pdf文件字体大小_如何使用python中的pyPDF2更改pdf文件中的字体
- miner更换owner钱包地址
- GitHub+JenKins集成Python自动化测试脚本
- MyBatis基础入门-2
- 快进来看看!!!C语言——扫雷小游戏(递归展开无雷区)
- 结合MACD看现货白银价格走势图
- BMI指数(Body Mass Index身体质量指数),简称体质指数又称体重指数,BMI值是根据你的身高、体重按照一定的公式得出数值,是一个衡量你身体健康的参数。
- OPA-Gatekeeper使用
- scala将csv转换成insert语句
- ucore - 第一章 - bootloader启动过程
- 毕设专题1 — 开始准备结束的任务