古堡算法

福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:
ABCDE * ? = EDCBA
他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”
华生:“我猜也是!”
于是,两人沉默了好久,还是没有算出合适的结果来。
请你利用计算机的优势,找到破解的答案。
把 ABCDE 所代表的数字写出来。

思路:对最小的不重复数12345到最大的不重复数98765进行遍历。 一个cheak函数 检查每位是否相同进行筛选,
如果不相同则经行该数对1~9的乘积 如果等于倒数则输出。

方法1:

#include<iostream> 
using namespace std;
int dao(int i)
{
	int a,b,c,d,e,sum;
	a = i%10;
	b = i/10%10;
	c = i/100%10;
	d = i/1000%10;
	e = i/10000;
	sum = a*10000 + b*1000 + c*100 + d*10 + e;
	return sum;
}
int cheak(int i)
{
	int a,b,c,d,e;
	a = i%10;
	b = i/10%10;
	c = i/100%10;
	d = i/1000%10;
	e = i/10000;
	if((a != b) && (b != c) && (c != d) && (d != e) && (a != c) && (a != d) && (a != e) && (b != d) && (b != e) && (c != e)){
		return 1;
	}
	else
	  return  0;
}
int main()
{
	int a,b,c,d,e;
	int i;
	for(int i = 12345; i <= 98765; i++){
		if(cheak(i) == 0){
			continue;
		}
		for(int j = 1; j <= 9; j++){
			if(j*i == dao(i)){
				cout << i<<" "<<j<< endl;
			}
		}
	}
}

方案2:

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
	for(int a=1;a<=9;a++)
	{
		for(int b=0;b<=9;b++)
		{
			for(int c=0;c<=9;c++)
			{
				for(int d=0;d<=9;d++)
				{
					for(int e=0;e<=9;e++)
					{
						if(a!=b&&a!=c&&a!=d&&a!=e&&b!=c&&b!=d&&b!=e&&c!=d&&c!=e&&d!=e)
						{
							if((e*10000+d*1000+c*100+b*10+a)%(a*10000+b*1000+c*100+d*10+e)==0)
							{
								printf("%d%d%d%d%d\n",a,b,c,d,e);
							}
						}
					}
				}
			}
		}
	}
	return 0;
 } 

答案:21978

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值