Given a 6 digit number, calculate the minimum number of digits that needs to be replaced in order to make the number magical. The number is considered magical if the sum of first three digits equals to the sum of last three digits. In one operation, we can choose a digit at any position and replace it with any arbitrary digit.
Examples :
Input: 123456
Output: 2
Explanation : Replace 4 with 0 and 5 with 0,
then number = 123006, where
1 + 2 + 3 = 0 + 0 + 6,
hence number of replacements
done = 2
Input: 111000
Output: 1
Explanation: Replace 0 with 3, then
number = 111030, where
1 + 1 + 1 = 0 + 3 + 0,
hence number of replacements
done = 1
Approach :
The best approach will be to check with all the magical numbers and the number of replacements needed. Run a loop that generates all 6 digit numbers. Check if that number is magical, if it is then simply calculate the number of replacements needs to be done and compare with the ans, if it is smaller then make it the the ans and at the end return ans.
Below is the implementation of the above approach.
C++
// CPP program to make a number magical #include "bits/stdc++.h" using namespace std; // function to calculate the minimal changes int calculate(string s) { // maximum digits that can be changed int ans = 6; // nested loops to generate all 6 // digit numbers for (int i = 0; i < 10; ++i) { for (int j = 0; j < 10; ++j) { for (int k = 0; k < 10; ++k) { for (int l = 0; l < 10; ++l) { for (int m = 0; m < 10; ++m) { for (int n = 0; n < 10; ++n) { if (i + j + k == l + m + n) { // counter to count the number // of change required int c = 0; // if first digit is equal if (i != s[0] - '0') c++; // if 2nd digit is equal if (j != s[1] - '0') c++; // if 3rd digit is equal if (k != s[2] - '0') c++; // if 4th digit is equal if (l != s[3] - '0') c++; // if 5th digit is equal if (m != s[4] - '0') c++; // if 6th digit is equal if (n != s[5] - '0') c++; // checks if less then the // previous calculate changes if (c < ans) ans = c; } } } } } } } // returns the answer return ans; } // driver program to test the above function int main() { // number stored in string string s = "123456"; // prints the minimum operations cout << calculate(s); } |
Java
// java program to make a number magical import java.io.*; class GFG { // function to calculate the minimal changes static int calculate(String s) { // maximum digits that can be changed int ans = 6; // nested loops to generate // all 6 digit numbers for (int i = 0; i < 10; ++i) { for (int j = 0; j < 10; ++j) { for (int k = 0; k < 10; ++k) { for (int l = 0; l < 10; ++l) { for (int m = 0; m < 10; ++m) { for (int n = 0; n < 10; ++n) { if (i + j + k == l + m + n) { // counter to count the number // of change required int c = 0; // if first digit is equal if (i != s.charAt(0) - '0') c++; // if 2nd digit is equal if (j != s.charAt(1) - '0') c++; // if 3rd digit is equal if (k != s.charAt(2) - '0') c++; // if 4th digit is equal if (l != s.charAt(3) - '0') c++; // if 5th digit is equal if (m != s.charAt(4) - '0') c++; // if 6th digit is equal if (n != s.charAt(5) - '0') c++; // checks if less then the // previous calculate changes if (c < ans) ans = c; } } } } } } } // returns the answer return ans; } // Driver code static public void main (String[] args) { // number stored in string String s = "123456"; // prints the minimum operations System.out.println(calculate(s)); } } // This code is contributed by vt_m. |
Python 3
# Python 3 program to make a number magical # function to calculate the minimal changes def calculate( s): # maximum digits that can be changed ans = 6 # nested loops to generate all 6 # digit numbers for i in range(10): for j in range(10): for k in range(10): for l in range(10): for m in range(10): for n in range(10): if (i + j + k == l + m + n): # counter to count the number # of change required c = 0 # if first digit is equal if (i != ord(s[0]) - ord('0')): c+=1 # if 2nd digit is equal if (j != ord(s[1]) - ord('0')): c+=1 # if 3rd digit is equal if (k != ord(s[2]) - ord('0')): c+=1 # if 4th digit is equal if (l != ord(s[3]) - ord('0')): c+=1 # if 5th digit is equal if (m != ord(s[4]) - ord('0')): c+=1 # if 6th digit is equal if (n != ord(s[5]) - ord('0')): c+=1 # checks if less then the # previous calculate changes if (c < ans): ans = c # returns the answer return ans # driver program to test the above function if __name__ == "__main__": # number stored in string s = "123456" # prints the minimum operations print(calculate(s)) |
C#
// C# program to make a number magical using System; class GFG { // function to calculate the minimal changes static int calculate(string s) { // maximum digits that can be changed int ans = 6; // nested loops to generate // all 6 digit numbers for (int i = 0; i < 10; ++i) { for (int j = 0; j < 10; ++j) { for (int k = 0; k < 10; ++k) { for (int l = 0; l < 10; ++l) { for (int m = 0; m < 10; ++m) { for (int n = 0; n < 10; ++n) { if (i + j + k == l + m + n) { // counter to count the number // of change required int c = 0; // if first digit is equal if (i != s[0] - '0') c++; // if 2nd digit is equal if (j != s[1] - '0') c++; // if 3rd digit is equal if (k != s[2] - '0') c++; // if 4th digit is equal if (l != s[3] - '0') c++; // if 5th digit is equal if (m != s[4] - '0') c++; // if 6th digit is equal if (n != s[5] - '0') c++; // checks if less then the // previous calculate changes if (c < ans) ans = c; } } } } } } } // returns the answer return ans; } // Driver code static public void Main () { // number stored in string string s = "123456"; // prints the minimum operations Console.WriteLine(calculate(s)); } } // This code is contributed by vt_m. |
PHP
<?php // PHP program to make a number magical // function to calculate // the minimal changes function calculate($s) { // maximum digits that // can be changed $ans = 6; // nested loops to generate // all 6 digit numbers for ($i = 0; $i < 10; ++$i) { for ($j = 0; $j < 10; ++$j) { for ($k = 0; $k < 10; ++$k) { for ( $l = 0; $l < 10; ++$l) { for ($m = 0; $m < 10; ++$m) { for ( $n = 0; $n < 10; ++$n) { if ($i + $j + $k == $l + $m + $n) { // counter to count the number // of change required $c = 0; // if first digit is equal if ($i != $s[0] - '0') $c++; // if 2nd digit is equal if ($j != $s[1] - '0') $c++; // if 3rd digit is equal if ($k != $s[2] - '0') $c++; // if 4th digit is equal if ($l != $s[3] - '0') $c++; // if 5th digit is equal if ($m != $s[4] - '0') $c++; // if 6th digit is equal if ($n != $s[5] - '0') $c++; // checks if less then the // previous calculate changes if ($c < $ans) $ans = $c; } } } } } } } // returns the answer return $ans; } // Driver Code // number stored in string $s = "123456"; // prints the minimum operations echo calculate($s); // This code is contributed by ajit. ?> |
Output :
2
Time complexity : O( 10^6)
Auxiliary Space : O(1)
This article is contributed by Raja Vikramaditya. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
Recommended Posts:
- Replace minimal number of characters to make all characters pair wise distinct
- Make a lexicographically smallest palindrome with minimal changes
- Minimal moves to form a string by adding characters or appending string itself
- Minimum number of given operations required to make two strings equal
- Minimum number of operations required to make two strings equal
- Minimum move to end operations to make all strings equal
- Count of operations to make a binary string"ab" free
- Operations required to make the string empty
- Minimum operations to make frequency of all characters equal K
- Minimum operations required to make the string satisfy the given condition
- Minimize count of given operations required to make two given strings permutations of each other
- Count the number of carry operations required to add two numbers
- Minimum number of operations to move all uppercase characters before all lower case characters
- Minimum number of given operations required to convert a string to another string
- Minimum number of operations on a binary string such that it gives 10^A as remainder when divided by 10^B
- Maximum number of given operations to remove the entire string
- Reduce N to 1 with minimum number of given operations
- Find the maximum difference after applying the given operations two times on a number
- Min number of operations to reduce N to 0 by subtracting any digits from N
- Minimum number of operations required to obtain a given Binary String

