鱼C论坛

 找回密码
 立即注册
查看: 2647|回复: 10

[技术交流] 加法变乘法

[复制链接]
发表于 2017-12-8 11:21:24 | 显示全部楼层 |阅读模式

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

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

x
如题看图 ,这个题实在不会做了怎么让他加着加着突然乘然后继续一直到49个数字求大神指导
QQ图片20171208111257.png
QQ图片20171208111302.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-8 12:08:02 | 显示全部楼层
楼主大人,这一题使用穷举的方法就可以很容易的求解出来
首先题目要求是将两个不连续的加号换成乘号,我们就可以确定我们需要使用两重循环,第一重循环是找出第一个“加号换乘号”,第二重循环是找出第二个“加号换乘号”,然后分别计算每两次变换之后的最终结果,如果和2015相等,那么就是目标结果。
程序如下,楼主大人如果看不懂可以问在下哦
#include<iostream>

using namespace std;

int main(void){
        int sum = 1225;//原加法结果
        
        for(int i = 2; i <= 47; i++){
                //把其中一个不相邻的加号变成乘号,计算最终结果
                int temp = sum-(i + (i-1)) + (i * (i-1));
                
                for(int j = i + 2; j <= 49; j++){
                        //把第二个加号变成乘号,计算结果
                        int temp2 = temp - (j + (j-1)) + (j * (j-1));

                        if(temp2 == 2015){
                                printf("the first num is %d\n", i-1);
                        }
                }
        }
}
程序执行结果如下,根据题目要求,我们很容易知道,本题结果是16
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-8 13:06:04 | 显示全部楼层
tailor_long 发表于 2017-12-8 12:08
楼主大人,这一题使用穷举的方法就可以很容易的求解出来
首先题目要求是将两个不连续的加号换成乘号,我们 ...

里面2个for循环的内容没明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-8 15:28:53 | 显示全部楼层
本帖最后由 tailor_long 于 2017-12-8 15:31 编辑
解圣洁 发表于 2017-12-8 13:06
里面2个for循环的内容没明白


楼主你好,
for(int i = 2; i <= 47; i++){
                //把其中一个不相邻的加号变成乘号,计算最终结果
                int temp = sum-(i + (i-1)) + (i * (i-1));
                for(int j = i + 2; j <= 49; j++){
                        //把第二个加号变成乘号,计算结果
                        int temp2 = temp - (j + (j-1)) + (j * (j-1));
                        if(temp2 == 2015){
                                printf("the first num is %d\n", i-1);
                        }
                }
        }
对于里面两层循环,意思是这样的。对于第一层循环,意思就是寻找遍历第一个乘号的位置
int temp = sum-(i + (i-1)) + (i * (i-1)); 这就话的意思就是当第(i-1)个加号换成乘号的时候,等式的结果是temp
然后当确定了第一个乘号的位置之后,我们进入第二层循环,因为两个乘号不能连着,所以我们初始化j = i + 2
然后int temp2 = temp - (j + (j-1)) + (j * (j-1));计算当第二个乘号确定了之后,等式的结果,然后进行判断也就是
if(temp2 == 2015){
        printf("the first num is %d\n", i-1);
}//如果满足题目约束条件,那么就输出第一个乘号的位置
楼主大人,我顺便写了一个测试程序,如果你上面看懂了,那就不要运行了,因为有点乱;
如果上面的看不懂的话,那么你就想一下 99乘法表的实现原理,我觉得都一样
就是确定了第一个乘号之后,例如将第一个加号改成乘号之后,第二层循环就是依次更改第三个加号、第四个加号、。。。、第48个加号为乘号,来算结果,如果都没有符合条件的
那么再回到第一层循环,更改第二个加号为乘号,,然后进入第二层循环,更改第四个、。。。为乘号,计算结果
、、、、、、、、、、、、、、、、、、、、、、、、、、、、测试程序、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
#include<iostream>

using namespace std;
void print(int temp, int index1, int index2);

int main(void){
        int sum = 1225;//原加法结果
        
        for(int i = 2; i <= 7; i++){//这里我将数改小了一点,方便演示
                //把其中一个不相邻的加号变成乘号,计算最终结果
                int temp = sum-(i + (i-1)) + (i * (i-1));
                for(int j = i + 2; j <= 9; j++){
                        //把第二个加号变成乘号,计算结果
                        int temp2 = temp - (j + (j-1)) + (j * (j-1));
                        print(temp2, i, j);//输出当前测试等式
                        if(temp2 == 2015){
                                printf("the first num is %d\n", i-1);
                        }
                        
                }
                printf("\n");
        }
        return 0;
}

void print(int temp, int index1, int index2){
        printf("当前等式: ");
        for(int i = 1 ; i < 9; i++){
                if(i == index1-1 || i == index2-1){
                        printf( "%d * ", i);
                        
                }
                else{
                        printf("%d + ", i);
                }
        }
        printf("%d = %d\n", i,temp);
}
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-8 17:42:19 | 显示全部楼层
tailor_long 发表于 2017-12-8 15:28
楼主你好,

对于里面两层循环,意思是这样的。对于第一层循环,意思就是寻找遍历第一个乘号的位置

谢谢大佬我明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-8 17:45:11 | 显示全部楼层
解圣洁 发表于 2017-12-8 17:42
谢谢大佬我明白了

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

使用道具 举报

 楼主| 发表于 2017-12-8 19:01:30 | 显示全部楼层

大佬真的辛苦打这么多字这么用心 感动死
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-8 19:02:09 | 显示全部楼层
本帖最后由 解圣洁 于 2017-12-8 19:03 编辑

.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-12-8 19:04:24 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-8 19:31:00 | 显示全部楼层
解圣洁 发表于 2017-12-8 19:01
大佬真的辛苦打这么多字这么用心 感动死

交流学习,共同进步
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-8 19:32:09 | 显示全部楼层

抱歉
不过有问题都可以在这上边提问,这里大牛好多的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-1 03:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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