洛谷 P1036 选数 C语言实现

洛谷 P1036 选数 题解 (深搜)C语言     n表示输入n个数,k表示从n个数里选择k个数进行相加,输出最后求和结果是素数的个数。 #include <stdio.h> #include<math.h> int ans = 0, n, k, a[20]; int prime(int x) { int i,flag=1; for (i = 2; i <= (int)(sqrt(x)); i++) { if (x % i == 0) { flag=0; }. 阅读详情
AI摘要

本文详细解析洛谷P1036选数题,介绍了一种有效的算法来解决从N个数字中选取M个数字的问题,通过递归方式实现组合,并判断组合之和是否为素数,最终输出符合条件的组合数量。

P1036 选数 - 洛谷

题目描述

已知 n 个整数 x1,x2,…,xn ,以及1个整数k(k<n)。从n个整数中任选k个整数相加,可分别得到一系列的和。例如当n=4,k=3,4个整数分别为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)
x1,x2,…,xn (1 <= xi <= 5000000)

输出格式:
屏幕输出,格式为: 1个整数(满足条件的种数)。

输入样例#1输出样例#1
4 3
3 7 12 19
1

思考

问题的关键点是,如何实现在N个数字中将其中的M个数字随机组合并不出现重复的情况。(即,位置不同但取的M个数是一样的情况为重复。 eg. 在1, 2, 3, 4, 5中取3个数,1, 2, 3 与 3, 2, 1是一种情况)
对于如何在N个数字中取M个数字这个问题,在看了其他人博客(参考博客)学习后采用的方法是

后往前选取,选定位置i后,再在前i-1个里面选取m-1个。

如 1 2 3 4 5 中选取 3 个 1、选取5后,再在前4个里面选取2个,而前4个里面选取2个又是一个子问题,递归即可。
2、如果不包含5,直接选定4,那么再在前3个里面选取2个,而前三个里面选取2个又是一个子问题,递归即可。
3、如果也不包含4,直接选取3,那么再在前2个里面选取2个,刚好只有两个。 纵向看,1、2、3刚好是一个for循环,初值为5,终值为m
横向看,该问题为一个前i-1个中选m-1的递归。

然后当m为0后,表示已经取了K个数,将b中存储的K个数相见,然后判断sum是否为素数,若为素数则计数t+1。
最后输出t就是最后答案。


AC代码

#include <stdio.h>

int sushu(int n);
void fun(int n, int m);

int a[22], b[21], n, k, t = 0;

int main()
{
    int i;
    scanf("%d%d", &n, &k);
    int b[k];
    for(i = 1; i <= n; i++)
        scanf("%d", &a[i]);
    fun(n, k);
    printf("%d", t);
}

void fun(int n, int m)//从n里面选m个数字 
{
    int i, sum;
    if(m == 0)
    {
        sum = 0;
        for(i = 0; i < k; i++)
            sum += b[i];
        if(sushu(sum))
            t++;
        return;
    }
    for(i = n ; i >= m; i--)
    {
        b[m - 1] = a[i];
        fun(i - 1, m - 1); 
    }
}

int sushu(int n)
{
    int i;
    for(i = 2; i < n; i++)
        if(n % i == 0)
            break;
    if(i == n || n == 2)
        return 1;
    else
        return 0;
}
【洛谷题解】P1036 [NOIP2002 普及组] 选数 难度相较于之前有一些提升,需要使用DFS算法和判断素数才可以解出来这道题。 阅读详情

相关推荐

P1036 [NOIP2002 普及组] 选数

已知 �n 个整数 �1,�2,⋯ ,��x1​,x2​,⋯,xn​,以及 11 个整数 �k(�

dacongming123355的博客 895

选数

题目描述 已知nn个整数 x1,x2,…,xnx1,x2,…,xn,以及一个整数k(k<n)k(k<n)。 从nn个整数中任选kk个整数相加,可分别得到一系列的和。 例如当n=4,k=3n=4,k=3,44个整数分别为 3,7,12,193,7,12,19时,可得全部的组合与它们的和为: 3+7+12=22 3+7+19=29 7+12+19=38 3+12+19=34 现在,要求...

weixin_42696809的博客 1977

题解:洛谷 P1036 [NOIP 2002 普及组] 选数

等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。个整数相加,可分别得到一系列的和。现在,要求你计算出和为素数共有多少种。#普及-# #DFS-一维#第一行两个空格隔开的整数。输出一个整数,表示种类数。本文分享的必刷题目是从。

团爸讲算法 981

C语言题目:k个n相加

已知n 个整数 x1,x2,⋯ ,xn,以及 1 个整数 k(k

Kuluha的博客 1055

风力发电机缺陷检测平台

风力发电机缺陷检测平台相关内容展示

weixin_39779415的博客 1111

图形学常见概念小结

前言:本文记录《unity shader入门精要》和openGL相关学习过程中一些学习要点; 文章目录PBR流程渲染管线细分着色器的底层实现,应用原理常见的色调映射算法openGl和Direct X的区别PBR流程和URP渲染管线Camera loop(剔除)MVP矩阵变换光线追踪前向渲染和延迟渲染shader和材质的区别bloom原理后处理的理解高斯模糊实现原理图像处理中的边缘检测算子 PBR流程 小结:一套基于自然界微平面理论、能量守恒、菲涅尔反射、线性空间等的科学理论所实现的基于物理的渲染系统,包含一

小谁的博客 1165

洛谷 P1036 递归 选数

洛谷 P1036 递归 选数 #include <stdio.h> #include <stdlib.h> int n,k,count=0; int a[22]={0}; void Fun(int number,int sum,int start);/*递归函数*/ int Judge(int n);/*判断质数*/ int main() { int i; ...

weixin_45888462的博客 263

采用离散模型搭建永磁同步电机控制系统

永磁同步电机发电系统分为控制器和发电机,通过simulink仿真软件进行发电系统的离散系统仿真。离散搭建仿真,可以更方便的自动代码生成。通过实践经验离散模块搭建,更能加深对整个控制系统的理解。离散系统在矢量控制中经常涉及到上个开关周期的角度,电压,或者预测下个周期的角度,电流,一般都是通过延时模块实现。PWM比较值寄存器被改写后都是使能了预装载,采样后触发计算到比较值生效可以延时0.5个开关周期Ts,也可以延时1个开关周期Ts,可以通过离散系统进行仿真,大大缩短开发周期。

f1072239934的博客 2863

DFS问题初探

今天刷洛谷的题,做到函数与递归这一块(P1036 选数)。真的很头疼,一直很难理解递归的代码,更不用说自己去写了, 但有些题目基本也只能用递归来写,不得不硬着头皮研究一下。 如果理解有不对,或者大神有比较好的理解递归程序的方法,欢迎在下面留言哦。谢谢。 先上一个全排列: P1706 全排列问题 题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现...

why_cant_i_change的博客 710

R_柱状图(加误差线,显著性差异)

先放最终效果图 结果图 # bar_plot 2021/01/19 # 导入所需的包 library(ggplot2) library(ggthemr) library(ggsignif) library(tidyverse) library(dplyr) library(ggpubr) library(devEMF) # 导入并处理数据,需要两张表,一个是原始汇总表格,另外一些是每一...

wt141643的博客 2万+

别再只用CANape测数据了!手把手教你用ASAP2 Studio编辑A2L文件(附MAP文件更新避坑指南)

本文深入探讨ASAP2 Studio在ECU开发中的高阶应用,特别是如何利用其编辑A2L文件并同步更新MAP文件,提升测量标定效率。文章详细解析了ASAP2 Studio的双向同步能力、MAP文件更新全流程及变量管理技巧,帮助工程师避免常见错误,优化工作流程。

weixin_26833939的博客 508

洛谷P1036选数

题目描述 已知 n 个整数 x1​,x2​,…,xn​,以及1个整数k(k<n)。从n个整数中任选k个整数相加,可分别得到一系列的和。例如当n=4,k=3,4个整数分别为3,7,12,19时,可得全部的组合与它们的和为: 3+7+12=22 3+7+19=29 7+12+19=38 3+12+19=334。 现在,要求你计算出和为素数共有多少种。 例如上例,只有一种的和为素数:3+7+19=...

Vison307的博客 247

从‘最长白列’到‘八邻域’:智能车图像巡线算法怎么选?我的踩坑经验分享

本文深入探讨了全国大学生智能汽车竞赛中图像巡线算法的选型与优化,对比了最长白列法、八邻域算法等五种主流方法的性能与适用场景。通过实战数据和代码示例,分析了各算法在直道、弯道及特殊赛道元素中的表现,并提供了内存优化、参数调整等实用技巧,帮助参赛团队提升智能车的巡线精度与效率。

weixin_30374009的博客 640

洛谷P1036 选数(C++)

那我们面临的第二个问题就是,3个1怎么找,这里其实c++正好有个函数可以实现这个功能,叫做__builtin_popcount(int n),他的功能就是比如n为15时,他会返回15的二进制形式(1111)中有几个1(没错,就这样就解决了)但是,这个函数,他只是在GCC编译器里才能使用,如果在其他编译器里,可能就没法用了(鼠鼠就是这样子,然后查了半天资料),但是,咱们可以试着模拟实现一下,也不是很复杂。这句话的作用就是判断哪里是1,“&”的意思就是与,即0&0=0,0&1=0,1&1=1;

spiritualfood的博客 1167

大模型算法岗常见面试题100道

LangChain是一个用于构建和运行大型语言模型应用的开源框架。它提供了一套工具和组件,帮助开发者将大型语言模型(如 GPT-3)与其他工具和API结合,以完成更复杂的任务。1、LangChain包含哪些核心概念?Components:可重用的模块,例如API调用、数据库查询等。Chains:将多个Components链接在一起以完成特定任务的流程。Prompt Templates: 用于指导语言模型生成输出的文本模板。Output Parsers:解析语言模型输出的工具。

具身机器人和通用AI 1961

【WRF-DART第一期】WRF/DART概述

【WRF-DART第一期】WRF/DART概述

WW、forever的博客 107

洛谷 P1036 选数

洛谷 P1036 选数 Description 已知 n 个整数 x1,x2,…,以及1个整数k(k<n)。从n个整数中任选k个整数相加,可分别得到一系列的和。例如当n=4,k=3,4个整数分别为3,7,12,19时,可得全部的组合与它们的和为: 3+7+12=22 3+7+19=29 7+12+19=38 3+12+19=34 现在,要求你计算出和为素数共有多少种。 例如上例,只有一种的...

weixin_30335353的博客 160

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

洛谷刷题Day2——P1618+P1036+P1088

人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法。这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类科学家,科学家破解这个数字的含义后,再把一个很小的数字加到这个大数上面,把结果告诉火星人,作为人类的回答。一个火星人会让你看他的手指,科学家会告诉你要加上去的很小的数。你的任务是,把火星人用手指表示的数与科学家告诉你的数相加,并根据相加的结果改变火星人手指的排列顺序。个整数,表示改变后的火星人手指的排列顺序。个整数的一个排列,用空格隔开,表示火星人手指的排列顺序。

Jayna_Su的博客 1264

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

P 1036选数

题目连接:https://www.luogu.org/problemnew/show/P1036 题目描述 已知 n 个整数 x1,x2,…,xn以及1个整数k(k&lt;n)。从n个整数中任选k个整数相加,可分别得到一系列的和。例如当n=4,k=3,4个整数分别为3,7,12,19时,可得全部的组合与它们的和为: 3+7+12=22 3+7+19=29 7+12+19=38 3+12...

qq_31038073的博客 344

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

洛谷P1036 [NOIP 2002 普及组] 选数 题解

6

Yiping2012ABC的博客 1302

C++编程解析-P1036选数-函数

解题思路: 该题简单。在挑选数的时候,我们从左侧开始选取起点,通过右侧数的结合,达到k个数,同时,在此过程当中,要对选取的数据进行累加求和。到达k个数的同时,去判断和是否满足条件。满足即为所求的一种情况。 程序: #include<iostream> #include<cmath> using namespace std; int n,k; int num[20]; ...

xingzhe_666的博客 1218

洛谷P1036 选数(DFS 深搜 线性筛 枚举)

题目链接:https://www.luogu.com.cn/problem/P1036 题目大意:n个数中选择k个求和,问结果有几个素数。 思路:C(n,k)种可能,每种都需要遍历到,考虑到n <= 20,1<xi <5e6,可以用DFS遍历所有可能。接下来就是判断结果是不是 素数,怎么做,2-sqrt(ans)能否可行?计算最差情况,n = ...

xiaomaolin2的博客 340

选数问题详解|组合枚举与素数判断算法(洛谷P1036)

掌握DFS组合枚举与素数判断,3分钟解决NOIP经典选数问题,附C++竞赛级代码

stillwatersss的博客 1036

洛谷 P1036 选数(C++)

#include <bits/stdc++.h> using namespace std; int n,k; int a[25]; bool isprime(int n) //判断素数 { for(int i = 2; i*i < n; i++){ if(n % i == 0) return false; } return true; } int cnt =...

散仙 3590

【洛谷】P1036 [NOIP2002 普及组] 选数

cnt: 当前选了多少个数。sum: 这些数的和。st: 从哪个数开始。

m0_62531913的博客 837
上一篇: 题目:输入某年某月某日,判断这一天是这一年的第几天?
下一篇: 洛谷 P1478 陶陶摘苹果(升级版) C语言实现
爱写BUG的老冉
博客等级 码龄8年 2357粉丝 43原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值