我是一个新手,请不要使用STL
时间: 2024-10-05 13:00:52 浏览: 26
如果你是个新手并且不想使用标准模板库(STL),我们可以用基本的数据结构和循环来实现这个问题。这里你可以使用一个数组来模拟unordered_set的功能,用于跟踪已经选择过的数字。以下是一个简单的非STL版本的C++代码:
```cpp
#include <iostream>
#define MAX_NUM 100
// 使用数组模拟unordered_set
bool is_used[MAX_NUM] = {false};
void dfs(int* a, int chosen[], int start, int k, int count) {
if (k == 0) {
count++;
return;
}
for (int i = start; i < MAX_NUM && !is_used[a[i]]; ++i) {
is_used[a[i]] = true; // 标记当前数字已选
dfs(a, chosen, i+1, k-1, count); // 递归尝试下一张卡
is_used[a[i]] = false; // 回溯,取消标记
}
}
int solve(int* a, int k) {
sort(a, a + k); // 排序
int total_count = 0;
int chosen[k]; // 存储已选的k个数字
for (int i = 0; i < k; ++i) {
dfs(a, chosen, i, k-i, total_count);
}
return total_count;
}
int main() {
int n, k;
cin >> n >> k;
int a[n];
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
int result = solve(a, k);
cout << "牛牛总共能拼成 " << result << " 种不同的数字." << endl;
return 0;
}
```
在这个版本中,我们使用了一个布尔数组`is_used`来跟踪数字是否已经被选择,以及一个`chosen`数组存储已选数字。`dfs`函数的工作原理与之前相似,只是使用数组的方式替代了unordered_set。
阅读全文