蓝桥杯试题
编译环境:dev c++、NetBeans IDE 7.1.2 1.古堡算式
福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA 他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!” 华生:“我猜也是!”
于是,两人沉默了好久,还是没有算出合适的结果来。 请你利用
计算机的优势,找到破解的答案。 把 ABCDE 所代表的数字写出来。 #include
#define max 100000 using namespace std; int judge(int n,int m){ int num[5],i,j,p=n; i=0; while(p) {
num[i++]=p%10;//num[0] to num[4] are ABCDE p/=10; }//until p=0 for(i=0;i<4;i++)
for(j=i+1;j<5;++j)
if(num[i]==num[j]) return 0;//get five different number p=n*m;// ABCDE * ?
if(p/max) return 0;//if ABCDE * ?>100000 then not equals EDCBA i=4; while(p) {
if(p%10!=num[i--])return 0;// ABCDE * ?=EDCBA p/=10; }
return 1; }
int main() {
int i,j;
for(i=10000;i
巧妙之处在如何获取五个互不相同的数字。思路:用五位数的每一位分别代表ABCDE,这样查找范围就是(10000,100000),同样要满足ABCDE*?=EDCBA,ABCDE*?的范围同样是(10000,100000)。而?代表的数字不可能是1,范围是[2,10)。1、定义一个长度为五的数组nums,mums[0]代表E,nums[4]代表A,从(10000,100000)中取一个数字,先把这个五位数的每一位上的值赋给这个数组;2、检验这个数组中的数字是否满足两两互不相同,若满足则继续第三步,若不满足则跳回第一步;3、从[2,10)中取一个数字跟满足条件的五位数相乘,检验ABCDE*?是否超过100000,如果超过则再在[2,10)中找下一个数字检验,如果不超过则继续下一步;4、判断ABCDE*?=EDCBA,如果相等则找到符合条件的等式,若不相等则调回第一步。 Java版
public class ABCDE_to_EDCBA {
public static final int Max=100000;
public static boolean judge(int m,int n)//m代表每位上数字都不相同的五位数,n代表? {
int []nums = new int[5]; int i = 0; int p = m; while(p!=0) {
nums[i++] = p%10; p/=10; }
for(int x = 0 ;x<4;x++)//获得此五位数即ABCDE for(int y = x+1;y<5;y++) if(nums[x]==nums[y]) return false; p = m*n;
if(p/Max!=0)//ABCDE*?不能超过五位数 return false;
//判断ABCDE*?=EDCBA int k = 4; while(k!=0) {
if(nums[k]!=p%10) return false; p/=10; k--; }
return true; }
public static void main(String[] args) { for(int i = 10000;i for(int j = 2 ;j<10;j++) {
if(judge(i,j))
System.out.println(i+"*"+j+"="+i*j); } } } }
结果:
21978*4=87912
类似题目:
下列乘法算式中:每个汉字代表1个数字(1~9)。相同的汉字代表相同的数字,不同的汉字代表不同的数字。
赛软件 * 比赛 = 软件比拼
试编程确定使得整个算式成立的数字组合,如有多种情况,请给出所有可能的答案。
【参考结果】 465 * 14 = 6510
2. 巧排扑克牌
小明刚上小学,学会了第一个扑克牌“魔术”,到处给人表演。魔术的内容是这样的: 他手里握着一叠扑克牌:A,2,....J,Q,K 一共13张。他先自己精心设计它们的顺序,然后正面朝下拿着,开始表演。
只见他先从最下面拿一张放到最上面,再从最下面拿一张翻开放桌子上,是A;然后再从最下面拿一张放到最上面,再从最下面拿一张翻开放桌子上,是2;......如此循环直到手中只有一张牌,翻开放桌子上,刚好是K。
这时,桌上牌的顺序是:A,2,3,4,5,6,7,8,9,10,J,Q,K
请你计算一下,小明最开始的时候手里牌的顺序是怎样的。
把结果写出来,逗号分割,小明“魔术”开始时,最下面的那张牌输出为第一个数据。
//第四题 巧排扑克牌 #include using namespace std;
int operate(char *se