算法题每日一练---第3天:一步之遥

简介: 从昏迷中醒来,小明发现自己被关在X星球的废矿车里。 矿车停在平直的废弃的轨道上。 他的面前是两个按钮,分别写着 “F”和 “B”。

一、问题描述


从昏迷中醒来,小明发现自己被关在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.暴力法

#include<iostream>//暴力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.公式法

#include<iostream>//暴力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。



相关文章
|
1月前
|
算法 Java 程序员
【算法每日一练及解题思路】有n级台阶,一次只能上1级或2级,共有多少种走法?
本文深入解析了“爬楼梯问题”,探讨了递归与迭代两种解法,并提供了Java代码实现。通过分析问题本质,帮助读者理解动态规划技巧,提高解决实际编程问题的能力。关键词:Java, 算法, 动态规划, 爬楼梯问题, 递归, 迭代。
66 0
|
算法
算法题每日一练---第78天:二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target
192 1
算法题每日一练---第78天:二分查找
|
存储 算法
|
算法
算法题每日一练---第76天:丑数 l
丑数 就是只包含质因数 2、3 和 5 的正整数。
150 1
算法题每日一练---第76天:丑数 l
|
算法
算法题每日一练---第75天:Nim 游戏
你和你的朋友,两个人一起玩 Nim 游戏。
327 0
算法题每日一练---第75天:Nim 游戏
|
算法
算法题每日一练---第74天:快乐数
编写一个算法来判断一个数 n 是不是快乐数。
180 0
算法题每日一练---第74天:快乐数
|
存储 算法
算法题每日一练---第73天:加一
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
162 0
算法题每日一练---第73天:加一
|
算法
算法题每日一练---第72天:数字 1 的个数
给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。
228 0
算法题每日一练---第72天:数字 1 的个数
|
存储 算法
算法题每日一练---第71天:回文数
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
158 0
算法题每日一练---第71天:回文数