📜  到达带有 +t 和 -t 的点的最短时间在时间 t 移动

📅  最后修改于: 2021-10-26 05:26:12             🧑  作者: Mango

给定一个正坐标 ‘X’ 并且您在坐标 ‘0’ 处,任务是通过以下移动找到到达坐标 ‘X’ 所需的最短时间:
在时间“t”,您可以保持在同一位置,也可以向左或向右跳跃长度正好为“t”。换句话说,您可以在坐标 ‘x – t’、’x’ 或 ‘x + t’ 在时间 ‘t’ 处,其中 ‘x’ 是当前位置。
例子:

Input: 6
Output: 3
At time 1, jump from x = 0 to x = 1 (x = x + 1)
At time 2, jump from x = 1 to x = 3 (x = x + 2)
At time 3, jump from x = 3 to x = 6 (x = x + 3)
So, minimum required time is 3.

Input: 9
Output: 4
At time 1, do not jump i.e x = 0 
At time 2, jump from x = 0 to x = 2 (x = x + 2)
At time 3, jump from x = 2 to x = 5 (x = x + 3)
At time 4, jump from x = 5 to x = 9 (x = x + 4)
So, minimum required time is 4.

方法:以下贪婪策略有效:
我们只是找到最小的 ‘t’ 使得 1 + 2 + 3 + … + t >= X。

  • 如果 (t * (t + 1)) / 2 = X 那么答案是 ‘t’。
  • 否则如果 (t * (t + 1)) / 2 > X,那么我们找到 (t * (t + 1)) / 2 – X 并从序列 [1, 2, 3, …, t] 中删除这个数字.结果序列总和为“X”。

下面是上述方法的实现:

C++
// C++ implementation of the above approach
 
#include 
 
using namespace std;
 
   // returns the minimum time
    // required to reach 'X'
    long cal_minimum_time(long X)
    {
 
        // Stores the minimum time
        long t = 0;
        long sum = 0;
 
        while (sum < X) {
 
            // increment 't' by 1
            t++;
 
            // update the sum
            sum = sum + t;
        }
 
        return t;
    }
 
// Driver code
int main()
{
        long n = 6;
        long ans = cal_minimum_time(n);
        cout << "The minimum time required is : " << ans ;
 
   return 0;
    
   // This code is contributed by ANKITRAI1
}


Java
// Java implementation of the above approach
class GFG {
 
    // returns the minimum time
    // required to reach 'X'
    static long cal_minimum_time(long X)
    {
 
        // Stores the minimum time
        long t = 0;
        long sum = 0;
 
        while (sum < X) {
 
            // increment 't' by 1
            t++;
 
            // update the sum
            sum = sum + t;
        }
 
        return t;
    }
 
    // Driver code
    public static void main(String[] args)
    {
        long n = 6;
        long ans = cal_minimum_time(n);
        System.out.println("The minimum time required is : " + ans);
    }
}


Python3
# Python 3 implementation of the
# above approach
 
# returns the minimum time
# required to reach 'X'
def cal_minimum_time(X):
 
    # Stores the minimum time
    t = 0
    sum = 0
 
    while (sum < X):
         
        # increment 't' by 1
        t = t + 1
         
        # update the sum
        sum = sum + t;
     
    return t;
 
# Driver code
if __name__ == '__main__':
    n = 6
    ans = cal_minimum_time(n)
    print("The minimum time required is :", ans)
     
# This code is contributed By
# Surendra_Gangwar


C#
// C#  implementation of the above approach
using System;
 
public class GFG{
     
    // returns the minimum time
    // required to reach 'X'
    static long cal_minimum_time(long X)
    {
 
        // Stores the minimum time
        long t = 0;
        long sum = 0;
 
        while (sum < X) {
 
            // increment 't' by 1
            t++;
 
            // update the sum
            sum = sum + t;
        }
 
        return t;
    }
 
    // Driver code
    static public void Main (){
        long n = 6;
        long ans = cal_minimum_time(n);
        Console.WriteLine("The minimum time required is : " + ans);
    }
}


PHP


Javascript


输出:
The minimum time required is : 3

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程