当前位置: 首页 > article >正文

广州C++信奥老师解一本通题 1919:【02NOIP普及组】选数

【题目描述】

已知nn个整数x1,x2,……xn 以及一个整数K(K<n)。从n个整数中任选K个整数相加,可分别 得到一系列的和。例如当n=4, k=3 4个整数分别为3,7,12,19 3, 7,12,19时,可得全部的组合与它们的和为:

3+7+12=22   3+7+19=29   7+12+19=38  3+12+19=34

现在,要求你计算出和为素数共有多少种。

例如上例,只有一种的和为素数:(3+7+19=29)

【输入】

第一行为n和k(1≤n≤20,k<n)

第二行为n个数

x1x2……xn(1≤xi≤5000000),各数之间用一个空格隔开)

【输出】

一个整数(满足条件的种数)。

【输入样例】

4 3 
3 7 12 19

【输出样例】

1

此题跟1317:【例5.2】组合的输出 解法类似

#include <bits/stdc++.h>
using namespace std;
long long path[21],a[21];  //path存放组合的元素的数字 
int n,k,ans=0;  
bool isPrime(long long n)
{
	if(n<=1)
		return false;
	for(int i = 2; i <= sqrt(n);i++)
        if(n % i == 0)
            return false;
    return true;
}
void dfs(int start,int cnt)
{
	if(cnt>k)
	{
		long long sum=0; 
		for(int i=1;i<=k;i++)
			sum+=path[i];
		if( isPrime(sum) )
			ans++;
		return;
	}
	for(int i=start;i<=n;i++) //递归尝试数组元素下标 1,2,3,4等 
	{
		path[cnt]=a[i];
		dfs(i+1,cnt+1);
	}
}
int main()
{
	cin>>n>>k;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	memset(path,0,sizeof(path));
	dfs(1,1);
	cout<<ans;
	return 0;
}


http://www.kler.cn/a/322216.html

相关文章:

  • 有关在.Net Core中以TEXT类型将Json格式字段存到数据库的学习
  • 基于ollama的本地RAG实践
  • 什么是网络安全自动化以及优势与挑战
  • 深入探索《AI大模型开发之路》:我的读书心得
  • 在线代理提取IP:一文详解其含义和应用
  • 故障电弧探测器的重要作用和优势
  • 第163天:应急响应-后门攻击检测指南_Rookit_内存马_权限维持_WIN_Linux
  • Linux相关概念和重要知识点(7)(git、冯诺依曼体系结构)
  • 【C++笔试强训】如何成为算法糕手Day1
  • C++系列-STL容器中算法中的最大最小
  • Pymysql cursor.execute 批量执行插入语句踩坑
  • OpenAi_Moderation审核更新
  • stm32单片机个人学习笔记6(EXTI外部中断)
  • 【RabbitMQ 项目】客户端:消费者模块
  • WEB3.0是什么?
  • 「JavaScript深入」聊一聊 new操作符具体干了什么?
  • Springboot Mybatis操作数据库
  • 高精度图像尺寸测量仪(闪测仪)测量内径深度
  • CSS的弹性盒子模型(Flex box)
  • 【Hive】学习路线:架构、运维、Hsql实战、源码分析