📜  在添加数字d之后找到最小可能的数字总和

📅  最后修改于: 2021-04-22 04:13:00             🧑  作者: Mango

给定数字n和数字d,我们可以将d加至n多次(甚至可以为0)。我们的任务是找到通过执行上述操作可以达到的最小位数。
Digit Sum定义为递归直到小于10的数字的位数。

例子:

Input: n = 2546, d = 124
Output: 1
2546 + 8*124 = 3538 
DigitSum(3538)=1

Input: n = 123, d = 3
Output: 3

方法:

  1. 这里的第一个观察结果是使用%9方法来找到数字n的最小可能数字总和。如果对9取模为0,则返回9,否则返回余数。
  2. 第二个观察结果是a + d *(9k + 1)模9等于a + d * l模9,因此,对于d的无加法运算或前8个加法运算,查询的答案将可用。数字总和将重复。

下面是上述方法的实现:

C++
// C++ implementation of above approach
#include 
using namespace std;
  
// Function To find digitsum for a number
int digitsum(int n)
{
    // Logic for digitsum
    int r = n % 9;
    if (r == 0)
        return 9;
    else
        return r;
}
  
// Function to find minimum digit sum
int find(int n, int d)
{
    // Variable to store answer
    // Intialise by 10 as the answer
    // will always be less than 10
    int minimum = 10;
  
  
    // Values of digitsum will repeat after
    // i=8, due to modulo taken with 9
    for (int i = 0; i < 9; i++) {
        int current = (n + i * d);
        minimum = min(minimum, digitsum(current));
    }
  
    return minimum;
}
  
// Driver Code
int main()
{
    int n = 2546, d = 124;
    cout << "Minimum possible digitsum is :"
         << find(n, d);
  
    return 0;
}


Java
// Java implementation of above approach
import java.io.*;
public class gfg
{
    // Function To find digitsum for a number
public int digitsum(int n)
{
    // Logic for digitsum
    int r = n % 9;
    if (r == 0)
        return 9;
    else
        return r;
}
  
// Function to find minimum digit sum
public int find(int n, int d)
{
    // Variable to store answer
    // Intialise by 10 as the answer
    // will always be less than 10
    int minimum = 10;
  
  
    // Values of digitsum will repeat after
    // i=8, due to modulo taken with 9
    for (int i = 0; i < 9; i++) {
        int current = (n + i * d);
        minimum = Math.min(minimum, digitsum(current));
    }
  
    return minimum;
}
}
  
class geek
{
// Driver Code
public static void main(String[]args)
{
    gfg g = new gfg();
    int n = 2546, d = 124;
    System.out.println("Minimum possible digitsum is : "+ (g.find(n, d)));
}
}
//This code is contributed by shs..


Python3
# Python3 implementation of 
# above approach
  
# Function To find digitsum 
# for a number
def digitsum(n):
  
    # Logic for digitsum
    r = n % 9;
    if (r == 0):
        return 9;
    else:
        return r;
  
# Function to find minimum digit sum
def find(n, d):
  
    # Variable to store answer
    # Intialise by 10 as the answer
    # will always be less than 10
    minimum = 10;
  
    # Values of digitsum will 
    # repeat after i=8, due to 
    # modulo taken with 9
    for i in range(9):
  
        current = (n + i * d);
        minimum = min(minimum,
                      digitsum(current));
  
    return minimum;
  
# Driver Code
n = 2546; 
d = 124;
print("Minimum possible digitsum is :", 
                           find(n, d));
  
# This code is contributed by mits


C#
// C# implementation of above approach
using System;
public class gfg
{
    // Function To find digitsum for a number
 public int digitsum(int n)
 {
    // Logic for digitsum
    int r = n % 9;
    if (r == 0)
        return 9;
    else
        return r;
 }
  
// Function to find minimum digit sum
 public int find(int n, int d)
 {
    // Variable to store answer
    // Intialise by 10 as the answer
    // will always be less than 10
    int minimum = 10;
  
  
    // Values of digitsum will repeat after
    // i=8, due to modulo taken with 9
    for (int i = 0; i < 9; i++) {
        int current = (n + i * d);
        minimum = Math.Min(minimum, digitsum(current));
    }
  
    return minimum;
 }
}
  
class geek
{
// Driver Code
 public static void Main()
 {
    gfg g = new gfg();
    int n = 2546, d = 124;
    Console.WriteLine("Minimum possible digitsum is : {0}", (g.find(n, d)));
    Console.Read();
 }
}
//This code is contributed by SoumikMondal


PHP


输出:
Minimum possible digitsum is :1