鱼C论坛

 找回密码
 立即注册
查看: 1825|回复: 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
#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 = 0; 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;
        }
}
把第1个循环的初始化部分改为a=0即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

a没有经过0?我猜的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

我懂了,这是因为你的a没有循环过0这个数字,而答案中a刚好为0
#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 = 0; 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;
        }
}
把第1个循环的初始化部分改为a=0即可
想知道小甲鱼最近在做啥?请访问 -> 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 就可以了

如下:
#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 = 0; 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;
        }
}
               
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

感谢感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 03:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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