古堡算式

<span style="font-family: KaiTi_GB2312; background-color: rgb(255, 255, 255);">福尔摩斯到某古堡探险</span>

看到门上写着一个奇怪的算式:    ABCDE * ? = EDCBA

他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”

华生:“我猜也是!”

于是,两人沉默了好久,还是没有算出合适的结果来。

请你利用计算机的优势,找到破解的答案。

把 ABCDE 所代表的数字写出来。

答案写在“解答.txt”中,不要写在这里!


解题思路:

    分析此题,可以得出以下信息:

    1.ABCDE 和?分别代表0~9不同的数字

    2.因为首字母代表高位数,暗含A和E不为0 

    3.同理,?不可能是0,一定是1~9之间的数

到此,可以知道BCD可能是0~9之间的数,AE?一定是1~9的数。


#include <stdio.h>
int main(void){
	int temp=12345;
	int a[5];
	for(;temp<100000;temp++){
		a[0]=temp%10;//取个位
		a[1]=temp/10%10;//取十位
		a[2]=temp/100%10;//取百位
		a[3]=temp/1000%10;//取千位
		a[4]=temp/10000;//取万位 
	
		/**
		*
		*if(a[0]==a[4]&&a[1]==a[3]&&a[0]!=a[1]){ 	//正难则反,反证法 
		*	
		*}
		**/
		//保证ABCDE代表的数字各不相同 
		if(a[0]==a[1]||a[0]==a[2]||a[0]==a[3]||a[0]==a[4]||
		   a[1]==a[2]||a[1]==a[3]||a[1]==a[4]||
		   a[2]==a[3]||a[2]==a[4]||
		   a[3]==a[4]){
			continue;
		}
		
		int t = (a[4]+a[3]*10+a[2]*100+a[1]*1000+a[0]*10000);
		int i=1;
		for(;i<10;i++){
			
			if(temp*i==t){    //此时,可以不用再判断i与ABCDE是否相同了,因为满足该条件的数很少,比赛时间有限,所以能简则简。
				printf("%d\n",t);
			}	
		}
		
	}
	
	
	
	return 0;
	
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值