在 C++ 中查找包含数字 k 或 k 的公倍数的第 n 个数字


给定两个正整数 n 和 k,我们需要找到包含数字 k 或 k 的公倍数的第 n 个数字。k 将在 [2, 9] 范围内。因此,如果 n 和 k 分别为 15 和 3,则输出为 33。因为数字 [3, 6, 9, 12, 13, 15, 18, 21, 23, 24, 27, 30, 31, 33] 是每个元素都包含数字 k = 3 或 k 整除的数字,并且在此处第 n 个数字为 33。所以输出为 33。

检查每个包含 k 和 k 的倍数的数字,直到我们得到第 n 个元素。

范例

 实时演示

#include<iostream>
using namespace std;
bool hasDigit(int n, int k) {
   while (n > 0) {
      int rem = n % 10;
      if (rem == k)
      return true;
      n = n / 10;
   }
   return false;
}
int countNumbers(int n, int k) {
   for (int i = k + 1, count = 1; count < n; i++) {
      if (hasDigit(i, k) || (i % k == 0))
         count++;
      if (count == n)
         return i;
   }
   return -1;
}
int main() {
   int n = 10, k = 2;
   cout << "Last number is " << countNumbers(n, k) << " before that the number contains " << k << " and multiple of " << k;
}

输出

Last number is 20 before that the number contains 2 and multiple of 2

更新于:18-12-2019

533 次浏览

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告