解 CSP-J2020优秀的拆分要求使用vector
以下是使用vector实现CSP-J2020优秀的拆分的示例代码:
#include <iostream>
#include <vector>
using namespace std;
// 判断一个数是否为质数
bool isPrime(int num) {
if (num < 2) {
return false;
}
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
// 递归拆分函数
void partition(vector<int>& nums, vector<vector<int>>& result, vector<int>& current, int start) {
int target = 0;
for (int i = 0; i < current.size(); i++) {
target += current[i];
}
if (target == nums[0]) {
result.push_back(current);
return;
}
for (int i = start; i < nums.size(); i++) {
if (current.size() > 0 && !isPrime(current.back() + nums[i])) {
continue; // 如果当前组合最后一个数和当前数的和不是质数,则跳过
}
current.push_back(nums[i]);
partition(nums, result, current, i + 1);
current.pop_back();
}
}
int main() {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
vector<vector<int>> result;
vector<int> current;
partition(nums, result, current, 0);
for (int i = 0; i < result.size(); i++) {
for (int j = 0; j < result[i].size(); j++) {
cout << result[i][j] << " ";
}
cout << endl;
}
return 0;
}
使用上述代码,你可以输入一个整数n,表示待拆分的数的个数,然后输入n个正整数,表示待拆分的数。程序会输出所有拆分结果,每行输出一个拆分结果,拆分结果按照从小到大的顺序输出
原文地址: http://www.cveoy.top/t/topic/iWzw 著作权归作者所有。请勿转载和采集!