一、问题描述
从昏迷中醒来,小明发现自己被关在X星球的废矿车里。 矿车停在平直的废弃的轨道上。 他的面前是两个按钮,分别写着 “F”和 “B”。
小明突然记起来,这两个按钮可以控制矿车在轨道上前进和后退。按F,会前进97米。按B会后退127米。 透过昏暗的灯光,小明看到自己前方1米远正好有个监控探头。他必须设法使得矿车正好停在摄像头的下方,才有机会争取同伴的援助。
小明飞快地计算,至少要多少次操作,才能把矿车准确地停在前方 1米远的地方。
二、解题思路
假设小明站在x轴上面,坐标为0。前面有两个按钮,按F,前进97米。按B后退127米。向x轴正方向移动+97m,向x轴负方向移动-127米。
对于这种题,我们依旧可以选择两种方法,第一种暴力求解,第二种巧用条件。
方法一 暴力法
使用两重for循环,第一重表示向前移动97m的次数,第二重表示向后移动127m的次数。限定最大移动次数,找到需要移动最少的一个。
方法二 公式法
在限定的范围内,加上求解最小值公式min(a,b),返回a,b两个中数据较小的一个,max则相反
三、编码实现
1.暴力法
//暴力usingnamespacestd; intmain() { inti,j; for(i=0;i<300;i++)//限定循环次数 { for(j=0;j<300;j++) { if(97*i-127*j==1)//判断是否符合条件 { cout<<i<<" "<<j<<" "<<i+j<<"\n"; //输出范围内符合条件的结果 } } } return0; }
2.公式法
//暴力usingnamespacestd; intmain() { inti,j,ans=600; for(i=0;i<300;i++)//限定循环次数 { for(j=0;j<300;j++) { if(97*i-127*j==1)//判断是否符合条件 { ans=min(ans,i+j);//公式法在原本输出结果的一行加了一个最小值判断 } } } cout<<ans;//输出结果return0; }
四、输出结果
输出结果97。