蓝桥C++ B 2013

蓝桥C++ B 2013


古堡算法:

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

方法一

#include <iostream>
using namespace std;
int main() {
	int x,y;
	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=1;e<=9;e++){
						if(a==b||a==c||a==d||a==e||b==c||b==d||b==e||c==d||c==e||d==e)
							continue;
						 x=a*10000+b*1000+c*100+d*10+e;
						 y=e*10000+d*1000+c*100+b*10+a;
						if(x%y==0)
							{
								cout<<x<<endl;
								break;
							}
					}
				}
			}
		}
	}
	return 0;
}

在这里插入图片描述


方法二:

使用C++ STL中的内置全排列函数next_permutation(first,last),对数组中的顺序进行按次序从小到大排序,next_permutation()将此排列的后一个排列找出赋给当前,并返回true,如果此排序就是最后一个返回flase。包含于algorithm库中,一下举例。
此函数细节可参考:https://blog.csdn.net/c18219227162/article/details/50301513

具体实现举例:

int main() {
  char  chars[] = {'a', 'b', 'c','d'};
  do {
    cout << chars[0] << chars[1] << chars[2] << endl;
  } while (next_permutation(chars, chars+3));

  return 0;
}

结果

abc
acb
bac
bca
cab
cba

本题的实现:

#include <iostream>
#include <algorithm>
using namespace std;
int main(){
	int n[]={0,1,2,3,4,5,6,7,8,9};
	do{
		if(n[0]==0||n[4]==0)
			continue;
		int x=n[0]*10000+n[1]*1000+n[2]*100+n[3]*10+n[4];
		int y=n[4]*10000+n[3]*1000+n[2]*100+n[1]*10+n[0];
		if(x%y==0){
			cout<<x<<endl;
			break;
		}
		}while(next_permutation(n,n+10));
	return 0;
}

结果:
在这里插入图片描述


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值