📜  使数字变得神奇的最小操作

📅  最后修改于: 2022-05-13 01:57:08.902000             🧑  作者: Mango

使数字变得神奇的最小操作

给定一个 6 位数字,计算需要替换的最小位数以使该数字具有魔力。如果前三位数字的总和等于后三位数字的总和,则该数字被认为是神奇的。在一次操作中,我们可以在任意位置选择一个数字并将其替换为任意数字。

例子 :

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

方法 :
最好的方法是检查所有神奇的数字和所需的替换数量。运行一个生成所有 6 位数字的循环。检查该数字是否神奇,如果是,则只需计算需要完成的替换次数并与 ans 进行比较,如果较小,则将其设为 ans,最后返回 ans。

下面是上述方法的实现。

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.


Python3
# 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


Javascript


输出 :

2

时间复杂度: O(10^6)
辅助空间: O(1)