鱼C论坛

 找回密码
 立即注册
查看: 2130|回复: 5

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

[复制链接]
发表于 2022-8-8 23:04:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
//        这是答案的:
//        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[10]={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[a] = 0;
                for(b = 0; b <= 9; b++)               
                        if(x[b])
                        {
                                x[b]=0;
                                for(c = 0; c <= 9; c++)                                       
                                        if(x[c])
                                        {
                                                x[c]=0;
                                                for(d = 0; d <= 9; d++)                                       
                                                        if(x[d])
                                                        {
                                                                x[d]=0;
                                                                for(e = 0; e <= 9; e++)                                                               
                                                                        if(x[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);
                                                                        }                                                       
                                                                x[d] = 1;
                                                        }
                                                x[c] = 1;
                                        }
                                x[b] = 1;
                        }
                x[a] = 1;
        }
}
最佳答案
2022-8-9 01:00:45
本帖最后由 额外减小 于 2022-8-9 01:02 编辑

我懂了,这是因为你的a没有循环过0这个数字,而答案中a刚好为0
  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5.         int x[10]={1,1,1,1,1,1,1,1,1,1};
  6.         int a, b, c, d, e, m, n, s, i;
  7.         for( a = 0; a <= 9; a++)
  8.         {
  9.                 x[a] = 0;
  10.                 for(b = 0; b <= 9; b++)   
  11.                                 {
  12.                                                                   
  13.                         if(x[b])
  14.                         {
  15.                                 x[b]=0;
  16.                                 for(c = 0; c <= 9; c++)   
  17.                                                                 {
  18.                                                                                                 
  19.                                         if(x[c])
  20.                                         {
  21.                                                 x[c]=0;
  22.                                                 for(d = 0; d <= 9; d++)  
  23.                                                                                                 {
  24.                                                                                                                                 
  25.                                                         if(x[d])
  26.                                                         {
  27.                                                                 x[d]=0;
  28.                                                                 for(e = 0; e <= 9; e++)
  29.                                                                                                                                 {
  30.                                                                                                                                                                                                                                                                                                                         
  31.                                                                         if(x[e])
  32.                                                                         {
  33.                                                                                 m = b*1000+d*100+c*10+a;
  34.                                                                                 n = b*1000+d*100+e*10+a;
  35.                                                                                 s = e*10000+a*1000+c*100+b*10+a;
  36.                                                                                 if(s == m+n)
  37.                                                                                 printf("车=%d,炮=%d,马=%d,兵=%d,卒=%d\n",e,d,c,b,a);
  38.                                                                         }
  39.                                                                                                                                 }
  40.                                                                 x[d] = 1;
  41.                                                         }
  42.                                                     }
  43.                                                 x[c] = 1;
  44.                                         }
  45.                                     }
  46.                                 x[b] = 1;
  47.                         }
  48.                     }
  49.                 x[a] = 1;
  50.         }
  51. }
复制代码

把第1个循环的初始化部分改为a=0即可
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-8-8 23:08:23 | 显示全部楼层
语法应该没错,我把变量换成答案的就能运行,是说每个棋子代表一个不同的数,
      兵炮马卒
+    兵炮车卒
= 车卒马兵卒
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-9 00:10:24 | 显示全部楼层
本帖最后由 额外减小 于 2022-8-9 00:26 编辑

a没有经过0?我猜的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-8-9 01:00:45 | 显示全部楼层    本楼为最佳答案   
本帖最后由 额外减小 于 2022-8-9 01:02 编辑

我懂了,这是因为你的a没有循环过0这个数字,而答案中a刚好为0
  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5.         int x[10]={1,1,1,1,1,1,1,1,1,1};
  6.         int a, b, c, d, e, m, n, s, i;
  7.         for( a = 0; a <= 9; a++)
  8.         {
  9.                 x[a] = 0;
  10.                 for(b = 0; b <= 9; b++)   
  11.                                 {
  12.                                                                   
  13.                         if(x[b])
  14.                         {
  15.                                 x[b]=0;
  16.                                 for(c = 0; c <= 9; c++)   
  17.                                                                 {
  18.                                                                                                 
  19.                                         if(x[c])
  20.                                         {
  21.                                                 x[c]=0;
  22.                                                 for(d = 0; d <= 9; d++)  
  23.                                                                                                 {
  24.                                                                                                                                 
  25.                                                         if(x[d])
  26.                                                         {
  27.                                                                 x[d]=0;
  28.                                                                 for(e = 0; e <= 9; e++)
  29.                                                                                                                                 {
  30.                                                                                                                                                                                                                                                                                                                         
  31.                                                                         if(x[e])
  32.                                                                         {
  33.                                                                                 m = b*1000+d*100+c*10+a;
  34.                                                                                 n = b*1000+d*100+e*10+a;
  35.                                                                                 s = e*10000+a*1000+c*100+b*10+a;
  36.                                                                                 if(s == m+n)
  37.                                                                                 printf("车=%d,炮=%d,马=%d,兵=%d,卒=%d\n",e,d,c,b,a);
  38.                                                                         }
  39.                                                                                                                                 }
  40.                                                                 x[d] = 1;
  41.                                                         }
  42.                                                     }
  43.                                                 x[c] = 1;
  44.                                         }
  45.                                     }
  46.                                 x[b] = 1;
  47.                         }
  48.                     }
  49.                 x[a] = 1;
  50.         }
  51. }
复制代码

把第1个循环的初始化部分改为a=0即可
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 就可以了

如下:

  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5.         int x[10]={1,1,1,1,1,1,1,1,1,1};
  6.         int a, b, c, d, e, m, n, s, i;
  7.         for( a = 0; a <= 9; a++)
  8.         {
  9.                 x[a] = 0;
  10.                 for(b = 0; b <= 9; b++)               
  11.                         if(x[b])
  12.                         {
  13.                                 x[b]=0;
  14.                                 for(c = 0; c <= 9; c++)                                       
  15.                                         if(x[c])
  16.                                         {
  17.                                                 x[c]=0;
  18.                                                 for(d = 0; d <= 9; d++)                                       
  19.                                                         if(x[d])
  20.                                                         {
  21.                                                                 x[d]=0;
  22.                                                                 for(e = 0; e <= 9; e++)                                                               
  23.                                                                         if(x[e])
  24.                                                                         {
  25.                                                                                 m = b*1000+d*100+c*10+a;
  26.                                                                                 n = b*1000+d*100+e*10+a;
  27.                                                                                 s = e*10000+a*1000+c*100+b*10+a;
  28.                                                                                 if(s == m+n)
  29.                                                                                 printf("车=%d,炮=%d,马=%d,兵=%d,卒=%d\n",e,d,c,b,a);
  30.                                                                         }                                                      
  31.                                                                 x[d] = 1;
  32.                                                         }
  33.                                                 x[c] = 1;
  34.                                         }
  35.                                 x[b] = 1;
  36.                         }
  37.                 x[a] = 1;
  38.         }
  39. }
复制代码

               
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

感谢感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 01:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表