2013蓝桥杯 马虎的算式 dfs回溯
2016-03-17 23:10
351 查看
马虎的算式
小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。
有一次,老师出的题目是:36 x 495 = ?
他却给抄成了:396 x 45 = ?
但结果却很戏剧性,他的答案竟然是对的!!
假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)
能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?
请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。
满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。
因为 36 * 495 = 396 * 45 = 17820
类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54
小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。
有一次,老师出的题目是:36 x 495 = ?
他却给抄成了:396 x 45 = ?
但结果却很戏剧性,他的答案竟然是对的!!
假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)
能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?
请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。
满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。
因为 36 * 495 = 396 * 45 = 17820
类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54
#include <iostream> #include<cstring> using namespace std; int num[5+5]; bool visited[10]; int ncount=0; void dfs(int cur) { if(cur==5) { int x1=num[0]*10+num[1]; int y1=num[2]*100+num[3]*10+num[4]; int x2=num[0]*100+num[3]*10+num[1]; int y2=num[2]*10+num[4]; if(x1*y1==x2*y2) { ncount++; } } for(int i=1;i<=9;i++) if(!visited[i]) { visited[i]=1; num[cur]=i; dfs(cur+1); visited[i]=0; } } int main() { memset(visited,0,sizeof(visited)); dfs(0); cout<<ncount<<endl; return 0; }
相关文章推荐
- VK Cup 2016 - Qualification Round 1 (Russian-Speaking Only, for VK Cup teams) C. Promocodes with Mistakes 水题
- EXPDP导入错误
- JSOUP初探
- 数组及常见操作
- APP发生卡顿,以及优化思路
- Lua调用C函数
- 图像形态学处理(3)
- Linux SSH 通过密匙连接主机
- 关于鼠标事件oncontextmenu和onselectstart的js写法问题
- 慌忙的专业学习者(大三上)
- 广播机制 笔记
- C++第2次实验(成年男性的标准体重)
- python堡垒机
- Oracle学习之PL/SQL块
- Nginx获取CDN转发的访客真实IP
- Android自制图片的三级缓存(代码+讲解)
- 并查集模板
- 啊哈哈,今天是一个小人物正式进军编程行业的第一天
- 021 模拟退火算法学习(一)-----求解最短连通路径
- iOS渲染机制与性能优化