不想起名字a 发表于 2022-8-8 23:04:21

求大佬解惑 练习一下穷举法感觉跟答案没什么区别 为啥我的运行不了 凌乱了

//        这是答案的:
//        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;
        }
}

不想起名字a 发表于 2022-8-8 23:08:23

语法应该没错,我把变量换成答案的就能运行,是说每个棋子代表一个不同的数,
      兵炮马卒
+    兵炮车卒
= 车卒马兵卒

额外减小 发表于 2022-8-9 00:10:24

本帖最后由 额外减小 于 2022-8-9 00:26 编辑

a没有经过0?我猜的{:10_334:}

额外减小 发表于 2022-8-9 01:00:45

本帖最后由 额外减小 于 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:20:03

本帖最后由 一点点儿 于 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;
      }
}

               

不想起名字a 发表于 2022-8-9 16:09:01

额外减小 发表于 2022-8-9 01:00
我懂了,这是因为你的a没有循环过0这个数字,而答案中a刚好为0

把第1个循环的初始化部分改为a ...

感谢感谢 {:10_307:}
页: [1]
查看完整版本: 求大佬解惑 练习一下穷举法感觉跟答案没什么区别 为啥我的运行不了 凌乱了