设计一个算法求象棋这些棋子各代表哪些数字
【象棋算式】
兵 炮 马 卒
+ 兵 炮 车 卒
车 卒 马 兵 卒
【问题求解】
在采用逻辑推理时先从“卒”入手,卒和卒相加,和的个位数仍是卒,这个数只能是0,确定卒是0后所有是卒的地方都为0.这时会看到“兵+兵=车 0”,从而得到兵为5、车是1,进一步得到“马+1=5”,所以马=4,又有“炮+炮=4”,从而炮=2。
最后得到兵=5,炮=2,马=4,卒=0,车=1
用代码实现时:设兵为a,炮为b,马为c,车为d,卒为e,要注意它们的值互不相同,代入象棋算式中
源代码如下:
#include <iostream>
using namespace std;
//设计一个算法求象棋这些棋子各代表哪些数字
void fun() {
int a, b, c, d, e, m, n, s; //设兵为a,炮为b,马为c,车为d,卒为e
for (a = 1; a <= 9;a++) {
for (b = 0; b <= 9;b++) {
for (c = 0; c <= 9;c++) {
for (d = 0; d <= 9;d++) {
for (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) {
continue;
}else{ //代入象棋算式中
m = a * 1000 + b * 100 + c * 10 + d;
n = a * 1000 + b * 100 + e * 10 + d;
s = e * 10000 + d * 1000 + c * 100 + a * 10 + d;
if (m+n==s) {
cout << "兵=" << a<<endl;
cout << "炮=" << b<<endl;
cout << "马=" << c << endl;
cout << "车=" << d << endl;
cout << "卒=" << e << endl;
}
}
}
}
}
}
}
}
int main() {
fun();
system("pause");
return 0;
}
输出结果:
兵=5
炮=2
马=4
车=0
卒=1
请按任意键继续. . .