📌  相关文章
📜  小于或等于Z的最大数,当除以Y时剩下余数X

📅  最后修改于: 2021-04-23 05:54:48             🧑  作者: Mango

给定三个整数x,y,z ,任务是找到小于或等于z的最大非负数,当除以y时剩下余数x(给定x 例子:

Input: x = 1, y = 5, z = 8
Output: 6
Explanation:
6 is the largest number less than 8 
which when divided by 5 
leaves a remainder 1.

Input: x = 4, y = 6, z = 3
Output: -1
Explanation:
Since no such number exists the output is -1

方法:要解决上述问题,最先观察到的是,如果x> z,则不可能回答,因此输出为-1。
设所需的数字为p 。以下是解决问题的两个方程式:

  • p * y + x = 0
  • p * y <=(z – x)

为了找到答案,我们需要找到p的值。所以,

p = (z - x) / y

计算p之后,我们可以简单地找到答案是

p * y + x

下面是上述方法的实现:

C++
// C++ implementation to Find the
// largest non-negative number that
// is less than or equal to integer Z
// and leaves a remainder X when divided by Y
 
#include 
using namespace std;
 
// Function to get the number
int get(int x, int y, int z)
{
 
    // remainder can't be larger
    // than the largest number,
    // if so then answer doesn't exist.
    if (x > z)
        return -1;
 
    // reduce number by x
    int val = z - x;
 
    // finding the possible
    // number that is divisible by y
    int div = (z - x) / y;
 
    // this number is always <= x
    // as we calculated over z - x
    int ans = div * y + x;
 
    return ans;
}
 
// Driver Code
int main()
{
    // initialise the three integers
    int x = 1, y = 5, z = 8;
 
    cout << get(x, y, z) << "\n";
 
    return 0;
}


Java
// Java implementation to Find the
// largest non-negative number that
// is less than or equal to integer Z
// and leaves a remainder X when divided by Y
class GFG{
  
// Function to get the number
static int get(int x, int y, int z)
{
  
    // remainder can't be larger
    // than the largest number,
    // if so then answer doesn't exist.
    if (x > z)
        return -1;
  
    // reduce number by x
    int val = z - x;
  
    // finding the possible
    // number that is divisible by y
    int div = (z - x) / y;
  
    // this number is always <= x
    // as we calculated over z - x
    int ans = div * y + x;
  
    return ans;
}
  
// Driver Code
public static void main(String[] args)
{
    // initialise the three integers
    int x = 1, y = 5, z = 8;
  
    System.out.print(get(x, y, z)+ "\n");
}
}
 
// This code is contributed by sapnasingh4991


Python3
# Python implementation to Find the
# largest non-negative number that
# is less than or equal to integer Z
# and leaves a remainder X when divided by Y
 
# Function to get the number
def get(x, y, z):
     
    # remainder can't be larger
    # than the largest number,
    # if so then answer doesn't exist.
    if (x > z):
        return -1
         
    # reduce number by x
    val = z - x
     
    # finding the possible
    # number that is divisible by y
    div = (z - x) // y
     
     
    # this number is always <= x
    # as we calculated over z - x
    ans = div * y + x
     
    return ans
 
 
# Driver Code
# initialise the three integers
x = 1
y = 5
z = 8
 
print(get(x, y, z))
 
# This code is contributed by shubhamsingh10


C#
// C# implementation to Find the
// largest non-negative number that
// is less than or equal to integer Z
// and leaves a remainder X when divided by Y
using System;
 
class GFG{
   
// Function to get the number
static int get(int x, int y, int z)
{
   
    // remainder can't be larger
    // than the largest number,
    // if so then answer doesn't exist.
    if (x > z)
        return -1;
   
    // reduce number by x
    int val = z - x;
   
    // finding the possible
    // number that is divisible by y
    int div = (z - x) / y;
   
    // this number is always <= x
    // as we calculated over z - x
    int ans = div * y + x;
   
    return ans;
}
   
// Driver Code
public static void Main(String[] args)
{
    // initialise the three integers
    int x = 1, y = 5, z = 8;
   
    Console.Write(get(x, y, z)+ "\n");
}
}
 
// This code is contributed by sapnasingh4991


输出:
6

时间复杂度: O(1)

辅助空间: O(1)