给定数字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
方法:
- 这里的第一个观察结果是使用%9方法来找到数字n的最小可能数字总和。如果对9取模为0,则返回9,否则返回余数。
- 第二个观察结果是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