在 C++ 中查找添加数字 d 后可能的最小数字和
在这个问题中,我们给定两个数字 n 和 d。我们的任务是找到添加数字 d 后可能的最小数字和。
问题描述 - 我们需要通过将 d 的第 k 个倍数添加到 n 来最小化数字和。
让我们举一个例子来理解这个问题,
输入
n = 5230, d = 54
输出
1
解释
The number will be 5230 + (2*54) = 5338
解决方案方法
解决该问题的一种简单方法是检查 d 从 1 到 8 的所有倍数,因为在第 9 个倍数时,数字和将重复。这是基于模 9,它将返回数字和。因此,a+d*(9k+l) 模 9 等价于 a+d*l 模 9。因此,我们将检查 l*d 从 1 到 8 的所有倍数,并返回找到的最小值。
程序中可以进行一项改进,使用的事实是数字和永远不会小于 1,因此如果我们有数字和 = 1,我们将返回它。
程序说明我们解决方案的工作原理,
示例
#include <iostream> using namespace std; int calcDigitSum(int n) { int i = n % 9; if (i == 0) return 9; else return i; } int findMinDigitSum(int n, int d) { int minSum = 10; int number; for (int i = 1; i < 9; i++) { number = (n + i * d); minSum = min(minSum, calcDigitSum(number)); if(minSum == 1) return minSum; } return minSum; } int main() { int n = 5230, d = 54; cout<<"The minimum possible digitsum after adding the number is "<<findMinDigitSum(n, d); return 0; }
输出
The minimum possible digitsum after adding the number is 1
广告