Given integers n, a, b and c, the task is to find the maximum value of x + y + z such that ax + by + cz = n.
Examples:
Input:
n = 10
a = 5
b = 3
c = 4
Output:
3
Explanation:
x = 0, y = 2 and z = 1Input:
n = 50
a = 8
b = 10
c = 2
Output:
25
Explanation:
x = 0, y = 0 and z = 25
Approach: Fix the values of x and y then the value of z can be calculated as z = (n – (ax + by)) / c. If current value of z is an integer then update the maximum value of x + y + z found so far.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach#include <bits/stdc++.h>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 codeint 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 approachimport 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 |
Python3
# Python3 implementation of the approachfrom 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 codeif __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 approachusing 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
<?php// PHP implementation of the approach// Function to return the maximum value of // (x + y + z) such that (ax + by + cz = n)function maxResult($n, $a, $b, $c){ $maxVal = 0; // i represents possible values of a * x for ($i = 0; $i <= $n; $i += $a) // j represents possible values of b * y for ($j = 0; $j <= $n - $i; $j += $b) { $z = ($n - ($i + $j)) / $c; // If z is an integer if (floor($z) == ceil($z)) { $x = (int)($i / $a); $y = (int)($j / $b); $maxVal = max($maxVal, $x + $y + (int)$z); } } return $maxVal;}// Driver code$n = 10;$a = 5;$b = 3;$c = 4;echo maxResult($n, $a, $b, $c);// This code is contributed by mits?> |
Javascript
<script>// Javascript implementation of the above approach // Function to return the maximum value of (x + y + z) // such that (ax + by + cz = n) function maxResult(n, a, b, c) { let maxVal = 0; // i represents possible values of a * x for (let i = 0; i <= n; i += a) // j represents possible values of b * y for (let j = 0; j <= n - i; j += b) { let z = (n - (i + j)) / c; // If z is an integer if (Math.floor(z) == Math.ceil(z)) { let x = i / a; let y = j / b; maxVal = Math.max(maxVal, x + y + z); } } return maxVal; }// driver program let n = 10, a = 5, b = 3, c = 4; // Function Call document.write(maxResult(n, a, b, c)); </script> |
3
Time Complexity: O(N2)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

… [Trackback]
[…] Read More on to that Topic: geeksforgeeks.org/maximize-the-value-of-x-y-z-such-that-ax-by-cz-n/ […]