求大佬解惑 练习一下穷举法感觉跟答案没什么区别 为啥我的运行不了 凌乱了
// 这是答案的:// 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(s == m+n)
// printf("兵=%d,炮=%d,马=%d,卒=%d,车=%d\n",a,b,c,d,e);
// 这是我的:
// m = b*1000+d*100+c*10+a;
// n = b*1000+d*100+e*10+a;
// s = e*10000+a*1000+c*100+b*10+a;
// if(s == m+n)
// printf("车=%d,炮=%d,马=%d,兵=%d,卒=%d\n",e,d,c,b,a);
// 下面是源代码 换上答案的就能运行
#include<stdio.h>
#include<math.h>
int main()
{
int x={1,1,1,1,1,1,1,1,1,1};
int a, b, c, d, e, m, n, s, i;
for( a = 1; a <= 9; a++)
{
x = 0;
for(b = 0; b <= 9; b++)
if(x)
{
x=0;
for(c = 0; c <= 9; c++)
if(x)
{
x=0;
for(d = 0; d <= 9; d++)
if(x)
{
x=0;
for(e = 0; e <= 9; e++)
if(x)
{
m = b*1000+d*100+c*10+a;
n = b*1000+d*100+e*10+a;
s = e*10000+a*1000+c*100+b*10+a;
if(s == m+n)
printf("车=%d,炮=%d,马=%d,兵=%d,卒=%d\n",e,d,c,b,a);
}
x = 1;
}
x = 1;
}
x = 1;
}
x = 1;
}
} 语法应该没错,我把变量换成答案的就能运行,是说每个棋子代表一个不同的数,
兵炮马卒
+ 兵炮车卒
= 车卒马兵卒 本帖最后由 额外减小 于 2022-8-9 00:26 编辑
a没有经过0?我猜的{:10_334:} 本帖最后由 额外减小 于 2022-8-9 01:02 编辑
我懂了,这是因为你的a没有循环过0这个数字{:10_256:},而答案中a刚好为0
#include<stdio.h>
#include<math.h>
int main()
{
int x={1,1,1,1,1,1,1,1,1,1};
int a, b, c, d, e, m, n, s, i;
for( a = 0; a <= 9; a++)
{
x = 0;
for(b = 0; b <= 9; b++)
{
if(x)
{
x=0;
for(c = 0; c <= 9; c++)
{
if(x)
{
x=0;
for(d = 0; d <= 9; d++)
{
if(x)
{
x=0;
for(e = 0; e <= 9; e++)
{
if(x)
{
m = b*1000+d*100+c*10+a;
n = b*1000+d*100+e*10+a;
s = e*10000+a*1000+c*100+b*10+a;
if(s == m+n)
printf("车=%d,炮=%d,马=%d,兵=%d,卒=%d\n",e,d,c,b,a);
}
}
x = 1;
}
}
x = 1;
}
}
x = 1;
}
}
x = 1;
}
}
把第1个循环的初始化部分改为a=0即可 本帖最后由 一点点儿 于 2022-8-9 15:31 编辑
因为卒为0才满足
兵炮马卒
+ 兵炮车卒
= 车卒马兵卒
按你的代码,卒对应a,刚好需要a为0,而代码中for( a = 1; a <= 9; a++) 遗漏了a=0的情况
而对应答案可以运行是因为答案中卒对应d,for(d = 0; d <= 9; d++)考虑了d=0的情况,你的代码和答案的变量含义不同
解决方法:源代码中for( a = 1; a <= 9; a++) 中的 a = 1 改为 a = 0 就可以了
如下:
#include<stdio.h>
#include<math.h>
int main()
{
int x={1,1,1,1,1,1,1,1,1,1};
int a, b, c, d, e, m, n, s, i;
for( a = 0; a <= 9; a++)
{
x = 0;
for(b = 0; b <= 9; b++)
if(x)
{
x=0;
for(c = 0; c <= 9; c++)
if(x)
{
x=0;
for(d = 0; d <= 9; d++)
if(x)
{
x=0;
for(e = 0; e <= 9; e++)
if(x)
{
m = b*1000+d*100+c*10+a;
n = b*1000+d*100+e*10+a;
s = e*10000+a*1000+c*100+b*10+a;
if(s == m+n)
printf("车=%d,炮=%d,马=%d,兵=%d,卒=%d\n",e,d,c,b,a);
}
x = 1;
}
x = 1;
}
x = 1;
}
x = 1;
}
}
额外减小 发表于 2022-8-9 01:00
我懂了,这是因为你的a没有循环过0这个数字,而答案中a刚好为0
把第1个循环的初始化部分改为a ...
感谢感谢 {:10_307:}
页:
[1]