给定整数n , a , b和c ,任务是找到x + y + z的最大值,使得ax + by + cz = n 。
例子:
Input:
n = 10
a = 5
b = 3
c = 4
Output:
3
Explanation:
x = 0, y = 2 and z = 1
Input:
n = 50
a = 8
b = 10
c = 2
Output:
25
Explanation:
x = 0, y = 0 and z = 25
方法:固定x和y的值,则z的值可以计算为z =(n –(ax + by))/ c 。如果z的当前值为整数,则更新到目前为止找到的x + y + z的最大值。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function to return the maximum value of (x + y + z)
// such that (ax + by + cz = n)
int maxResult(int n, int a, int b, int c)
{
int maxVal = 0;
// i represents possible values of a * x
for (int i = 0; i <= n; i += a)
{
// j represents possible values of b * y
for (int j = 0; j <= n - i; j += b)
{
float z = (float)(n - (i + j)) / (float)(c);
// If z is an integer
if (floor(z) == ceil(z))
{
int x = i / a;
int y = j / b;
maxVal = max(maxVal, x + y + (int)z);
}
}
}
return maxVal;
}
// Driver code
int main()
{
int n = 10, a = 5, b = 3, c = 4;
// Function Call
cout << maxResult(n, a, b, c);
return 0;
}
Java
// Java implementation of the approach
import java.util.*;
class GFG {
// Function to return the maximum value of (x + y + z)
// such that (ax + by + cz = n)
static int maxResult(int n, int a, int b, int c)
{
int maxVal = 0;
// i represents possible values of a * x
for (int i = 0; i <= n; i += a)
// j represents possible values of b * y
for (int j = 0; j <= n - i; j += b) {
float z = (float)(n - (i + j)) / (float)c;
// If z is an integer
if (Math.floor(z) == Math.ceil(z)) {
int x = i / a;
int y = j / b;
maxVal
= Math.max(maxVal, x + y + (int)z);
}
}
return maxVal;
}
// Driver code
public static void main(String args[])
{
int n = 10, a = 5, b = 3, c = 4;
// Function Call
System.out.println(maxResult(n, a, b, c));
}
}
// This code is contributed by
// Surendra_Gangwar
Python 3
# Python3 implementation of the approach
from math import *
# Function to return the maximum value
# of (x + y + z) such that (ax + by + cz = n)
def maxResult(n, a, b, c):
maxVal = 0
# i represents possible values of a * x
for i in range(0, n + 1, a):
# j represents possible values of b * y
for j in range(0, n - i + 1, b):
z = (n - (i + j)) / c
# If z is an integer
if (floor(z) == ceil(z)):
x = i // a
y = j // b
maxVal = max(maxVal, x + y + int(z))
return maxVal
# Driver code
if __name__ == "__main__":
n = 10
a = 5
b = 3
c = 4
# Function Call
print(maxResult(n, a, b, c))
# This code is contributed by Ryuga
C#
// C# implementation of the approach
using System;
class GFG {
// Function to return the maximum value of (x + y + z)
// such that (ax + by + cz = n)
static int maxResult(int n, int a, int b, int c)
{
int maxVal = 0;
// i represents possible values of a * x
for (int i = 0; i <= n; i += a)
// j represents possible values of b * y
for (int j = 0; j <= n - i; j += b) {
float z = (float)(n - (i + j)) / (float)c;
// If z is an integer
if (Math.Floor(z) == Math.Ceiling(z)) {
int x = i / a;
int y = j / b;
maxVal
= Math.Max(maxVal, x + y + (int)z);
}
}
return maxVal;
}
// Driver code
public static void Main(String[] args)
{
int n = 10, a = 5, b = 3, c = 4;
// Function Call
Console.WriteLine(maxResult(n, a, b, c));
}
}
// This code has been contributed by 29AjayKumar
PHP
输出
3
时间复杂度: O(N 2 )