Karl 想找到满足如下条件的正整数: 没有重复数码。 数的值小于 𝑘 k。 请你输出这些数的总个数。 【输入格式】 一个正整数 𝑘 k。 【输出格式】 一个整数表示结果。c++代码 搜索
时间: 2024-09-16 13:05:13 浏览: 39
数理统计简史-陈希孺
为了找出所有小于给定正整数 k 的非重复数字组成的正整数的数量,我们可以使用动态规划的方法。我们将创建一个二维数组 dp,其中 dp[i][j] 表示前 i 个数字(0 到 j)组成的最大整数且不包含重复的数码。
以下是一个 C++ 实现:
```cpp
#include <iostream>
using namespace std;
int findNonRepeating(int n) {
int k;
cin >> k; // 输入k
if (k <= 9) { // 如果k小于等于9,直接返回1,因为0到k都是符合条件的
return k + 1;
}
int dp[10][k]; // 初始化dp数组为0
for (int i = 1; i <= 9; ++i) { // 对每个可能的第一个数字
dp[0][i] = 1; // 当只有一个数字时,只有一种选择
}
for (int i = 1; i < 10; ++i) { // 遍历剩余的数字位置
for (int len = 1; len <= k; ++len) { // 遍历长度从1到k
for (int lastDigit = 0; lastDigit < i; ++lastDigit) { // 前一个数字不能和当前数字相同
if (dp[len - 1][lastDigit]) { // 如果上一个位置存在可用的数字
dp[len][i] += dp[len - 1][lastDigit]; // 更新当前长度和当前数字的选择数
}
}
}
}
return dp[k][9]; // 返回最后一个位置的数字,即所有符合条件的数的总数
}
int main() {
cout << "Result: " << findNonRepeating(50) << endl; // 示例:调用函数并输出结果
return 0;
}
```
这段代码首先读取输入的整数 k,然后计算满足条件的非重复数字的组合数量。最后,在 `main` 函数中调用这个函数并将结果输出。
阅读全文