洛谷 p1036 选数

    xiaoxiao2025-03-02  33

    #include<iostream> #include<cmath> using namespace std; int x[20], n, k;//设全局变量方便在函数中使用 bool isPrime(int n) { for (int i = 2; i <= sqrt(n); i++) { if (n%i == 0) return false; } return true; } int rule(int choose_left_num, int already_sum, int start, int end) {//choose_left_num为剩余的k,already_sum为前面累加的和,start和end为全组合剩下数字的选取范围;调用递归生成全组合, //在过程中逐渐把k个数相加,当选取的数个数为0时,直接返回前面的累加和是否为质数即可 if (choose_left_num == 0) return isPrime(already_sum);//如果是素数,返回1,则sum++; int sum = 0;//当start>end时,不进行循环,返回sum=0; for (int i = start; i <= end; i++) sum += rule(choose_left_num - 1, already_sum + x[i], i + 1, end); return sum; } int main() { cin >> n >> k; for (int i = 0; i<n; i++)cin >> x[i]; cout << rule(k, 0, 0, n - 1);//调用递归 }

    看了好几个小时才看懂洛谷题解的递归

    最新回复(0)