题目描述:
思维点:
逐个搜素添加
注意临界条件
要先判定能否添加
再判定下一步添加能否进行
题解
#include <iostream>
using namespace std;
int x[20];
int n, k, ans;
bool is_prime(int n) {
for (int i = 2; i * i <= n; i++)
if (n % i == 0)
return false;
return true;
}
void dfs(int i, int now, int sum) { //i为下一个等待添加的元素的编号, now为现在已要的个数, sum为已要数字的和
if (now == k) {
if(is_prime(sum))
ans++;
return;
}
if (i >= n) return;//注意两个if的先后顺序不能反,这个if是判定能不能接着往下搜索的
dfs(i + 1, now, sum);
dfs(i + 1, now + 1, sum + x[i]);
}
int main() {
cin >> n >> k;
for (int i = 0; i < n; i++)
cin >> x[i];
dfs(0, 0, 0);
cout << ans;
return 0;
}
版权声明:本文为qq_55475680原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。