在 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

更新于: 2021年3月12日

176 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告