-->
当前位置:首页 > 题库 > 正文内容

程序填空题:象棋棋子代表数问题(回溯法)

Luz4年前 (2021-06-19)题库815
在象棋版式中不同的棋子代表不同的数,如下图所示,设计一个算法求这些棋子各代表哪些数字。

![QQ截图20210406155317.png](~/11b90308-71ee-416d-85b0-1f2a9c7b417d.png)


### 输出格式:

输出兵、炮、马、卒的取值。

### 输出样例1:

```out
兵:5 炮:2 马:4 卒:0 车:1
```


```c++
#include 
#include 
void fun()
{	bool dig[10];
	int a,b,c,d,e,m,n,s;
	memset(dig,0,sizeof(dig));;	//置初值0表示所有数字均没有使用
	for (a=1;a<=9;a++)
	{	dig[a]=1;					//试探兵取值a
		for (b=0;b<=9;b++)
			if (!dig[b])
			{	dig[b]=1;				//试探炮取值b
				for (c=0;c<=9;c++)
					if (!dig[c])
					{	dig[c]=1;			//试探马取值c
						for (d=0;d<=9;d++)
							if (!dig[d])
							{	dig[d]=1;		//试探卒取值d
								for (e=0;e<=9;e++)
									if (!dig[e]) 
									{	dig[e]=1;		//试探车取值e
										m=;
										n=;
										s=;
										if (m+n==s)
											printf("兵:%d 炮:%d 马:%d 卒:%d 车:%d",a,b,c,d,e);
										dig[e]=0;		//回溯车的取值
									}
									dig[d]=0;	//回溯卒的取值
							}
							dig[c]=0;		//回溯马的取值
					}
					dig[b]=0;		//回溯炮的取值
			}
			dig[a]=0;	//回溯兵的取值
	}
}
int main()
{
	fun();
	return 0;
}
```






答案: 第1空:a*1000+b*100+c*10+d 第2空:a*1000+b*100+e*10+d 第3空:e*10000+d*1000+c*100+a*10+d


发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。