博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2013蓝桥杯 【初赛试题】 马虎的算式
阅读量:6431 次
发布时间:2019-06-23

本文共 1199 字,大约阅读时间需要 3 分钟。

标题: 马虎的算式
    小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。
    有一次,老师出的题目是:36 x 495 = ?
    他却给抄成了:396 x 45 = ?
    但结果却很戏剧性,他的答案竟然是对的!!
    因为 36 * 495 = 396 * 45 = 17820
    类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54
    假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)
    能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?
请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。
满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。
答案直接通过浏览器提交。

注意:只提交一个表示最终统计种类数的数字,不要提交解答过程或其它多余的内容。

题目分析:

典型的可以通过递归来做的题目,5个数表示了递归的层数;

我们从第一个数开始进行递归,对第一个数a遍历所有可能取到的值,然后进行下一层递归;

对第二个数b遍历所有可能取到的值,然后对这些值进行判断是否符合条件(对b和a的关系进行判断),如果不符合条件则停止递归,如果符合条件则进入下一层递归;

……

直到进入了第五层递归,如果e的值也符合条件,则对abcde进行判断,看时候符合条件ab * cde = adb * ce,符合条件则计数器加1.

#include
using namespace std;int num=0;bool check(int *a,int n){ for(int i=n-1;i>=0;i--) if(a[i]==a[n])return false; return true;}void next(int *a,int n){ int num1=a[0]*10+a[1]; int num2=a[2]*100+a[3]*10+a[4]; int num3=a[0]*100+a[3]*10+a[1]; int num4=a[2]*10+a[4]; if(num1*num2==num3*num4) num++;}void fun(int *a,int n){ if(n==5)next(a,5); else { for(int i=1;i<10;i++) { a[n] = i; if(check(a,n)) fun(a,n+1); } }}int main(){ int a[5]; fun(a,0); cout<
<
输出结果为142;

评价:这个题目是典型的通过递归方法来做的题目,多练习几道这类题目,掌握其一般形式和规律。

转载于:https://www.cnblogs.com/zhezh/p/3773479.html

你可能感兴趣的文章
说说 Spring AOP 中 @Aspect 的高级用法
查看>>
Workbox CLI中文版
查看>>
贝聊亿级数据库分库分表实践
查看>>
同时连接gitlab和github
查看>>
vuex源码分析
查看>>
tornado+datatables分页
查看>>
集成 Kubernetes 与 Cloud Foundry,IBM自有一套
查看>>
php 中英文字符分割
查看>>
No module named yum
查看>>
Shell处理用户输入参数----getopts
查看>>
【函数】06、装饰器的应用
查看>>
v$sysstat
查看>>
剑指offer 66通关纪念
查看>>
医疗信息化 医学 医院管理 医疗器械 资料下载
查看>>
nginx.conf 示例配置
查看>>
在办公电脑上设置日志服务器监控思科和华为设备
查看>>
python 字符串替换
查看>>
我的友情链接
查看>>
Linux之常用网络命令
查看>>
linux php 安装 curl
查看>>