在C ++中找到第n个包含数字k或可被k整除的数字

给定两个正整数n和k,我们必须找到第n个包含数字k或可被k整除的数字。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
猜你喜欢