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

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

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

![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

发表评论

访客

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