给定三个整数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)