回溯法——象棋算式

题目:

象棋算式中不同棋子代表不同的数,
题目算式
回溯示意图


代码:


/*象棋算式中不同棋子代表不同的数,兵 炮 马 卒 + 兵 炮 车 卒 = 车 卒 马 兵 卒*/
#include<bits/stdc++.h>
using namespace std;
void fun()
{
	int dig[10];
	memset(dig, 0, sizeof(dig));
	for(int a=1; a<=9; a++)
	{
		dig[a] = 1;	//试探兵取值a 
		for(int b=0; b<=9; b++) 
		{
			if(!dig[b])	//dig[b]为0 
			{
				dig[b] = 1;//试探炮取值b 
				for(int c=0; c<=9; c++)
				{
					if(!dig[c])
					{
						dig[c] = 1;//试探马取值c 
						for(int d=0; d<=9; d++)
						{
							if(!dig[d])
							{
								dig[d] = 1;//试探车取值d 
								for(int e=0; e<=9; e++)
								{
									if(!dig[e])
									{
										dig[e] = 1;//试探卒取值e 
										int m = a*1000+b*100+c*10+e;
										int n = a*1000+b*100+d*10+e;
										int sum = d*10000+e*1000+c*100+a*10+e;
										if(sum == m+n)
										{
											cout<<"车:"<<a<<"\t炮:"<<b<<"\t马:"<<c<<"\t车:"<<d<<"\t卒:"<<e<<endl;
										}
									dig[e] = 0;
									}
								}
							}
						dig[d] = 0;
						}
					}
				dig[c] = 0;
				}
			}
		dig[b] = 0;
		}
	dig[a] = 0;
	}
}
int main()
{
	fun();
	return 0;
}

运行结果截图:

运行结果截图

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值