给定两个正整数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