2012蓝桥杯【初赛试题】古堡算式
来源:互联网 发布:淘宝的广告价位图 编辑:程序博客网 时间:2024/05/29 03:16
题目描述:
福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:
ABCDE * ? = EDCBA
他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”
华生:“我猜也是!”
于是,两人沉默了好久,还是没有算出合适的结果来。
请你利用计算机的优势,找到破解的答案。
把 ABCDE 所代表的数字写出来。
答案写在“解答.txt”中,不要写在这里!
算法思路:
该题目是典型的使用递归解决的问题,可以直接套用递归算法的模式,即:进行若干层递归,并对每层的结果进行判断,如果不符合条件则推出递归,符合条件则进入下一层递归,直到满足递归终止条件,然后对最后的结果进行判断。
对于本题目,是进行了5层递归,然后分别对每层递归判断时候与前面的数值相等,如果相等就停止递归,不相等则进入下一层递归,直到结束了第五层递归,然后判断是否满足ABCDE * ? = EDCBA;
我们设num1=ABCDE,num2=EDCBA,我们可以对?从1~9进行遍历,以判断时候满足num1*?=num2,但是这样要进行9次运算,我们可以换个思路,?=num2/num1 ,也就是num1可以被num2整除(余数为0)并且,num2/num1的结果是一个小于10的数。
程序代码:
#include<iostream>using namespace std;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)//判断时候满足ABCDE * ? = EDCBA{int num1 = a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4];//num1=ABCDEint num2 = a[4]*10000+a[3]*1000+a[2]*100+a[1]*10+a[0];//num2=EDCBAif(num2%num1==0&&num2/num1<10)cout<<num1<<endl; }void fun(int *a,int n){if(n==5)//已经通过了前5层循环,然后进一步进行判断{next(a,n);return;}for(int i=0;i<10;i++){a[n] = i;if(check(a,n))fun(a,n+1);}}int main(){int a[5];fun(a,0);return 0;}
输出结果:
21978
3 1
- 2012蓝桥杯【初赛试题】古堡算式
- 2012蓝桥杯【初赛试题】古堡算式
- 2012蓝桥杯预赛试题本科c++古堡算式
- 蓝桥杯 历届试题 古堡算式,微生物繁殖
- 2012蓝桥杯C++本科 古堡算式
- 2012年 蓝桥杯C++省赛 古堡算式
- 蓝桥杯--2012--古堡算式(暴力)
- 古堡算式--蓝桥杯
- 蓝桥杯:古堡算式
- 蓝桥杯 古堡算式
- 蓝桥杯历届-古堡算式
- 蓝桥杯--古堡算式
- 2013蓝桥杯 【初赛试题】 马虎的算式
- 古堡算式--爆破(蓝桥杯)
- 2012年蓝桥杯之古堡算式
- 古堡算式,蓝桥杯2012年第2题
- 古堡算式
- 古堡算式
- 重写和重载的区别
- 如何禁止运行cmd
- linux配置表名不区分大小写
- 数据库
- 编程基础之计算机网络
- 2012蓝桥杯【初赛试题】古堡算式
- C语言宏定义技巧
- 关于Thread类中三个interrupt方法的研究与学习
- Setting Up the Development Environment for SharePoint 2010 on Windows Vista, Windows 7, and Windows
- SQL Server中的临时表和表变量
- 数据结构上机实验之二分查找
- struts1.3.8以后的版本里没有tld文件
- sdasdass
- 安装MySQL数据库最后一步出现无法响应问题详细解决方法