首页 > 编程知识 正文

c语言汉诺塔递归算法,c语言允许递归过程

时间:2023-05-03 16:26:16 阅读:153587 作者:220

基于问题C:【递归入门】组合的素数判定

主题描述已知的n个整数b1、b2、bn

且整数k(k<; n )。

将n个整数与任意k个整数相加,分别得到一系列的和。

例如,在n=4、k=3、4个整数分别为3、7、12、19情况下,所有的组合和它们之和如下

3 7 12=223 7 19=297 12 19=383 12 19=34。

现在,请计算一下质数和有多少种。

例如,只有一种之和是素数。 三七十九等于二十九。

输入第一行的两个整数。 n,k(1=n=20,k<; n ) )。

第二行中的n个整数: x1,x2,xn(1=Xi=5000000 ) )。

输出整数(满足条件的方案数)。

样本输入4 33 7 12 19样本输出1采用深度优先搜索递归的思路进行遍历。 从n个中选择k个,将n个收纳在一个排列中。 递归死胡同选择个数达到k个,选择后将该k个相加,判断对和是否为素数,若为,统计量加1。

因此,递归函数DFS有三个参数。 索引是索引号的数量,nowK是当前选择的数量,sum是当前选择的数量之和。

参考代码:

#include cstdioint n,k,p[22]; int count; OOLisprime(intc ) if ) C2 )返回假; for(intI=2; i*i=c; I ) if(c%I==0)返回假; }return true; }voidDFS(intindex,int nowk,int sum ) if ) nowk==k ) if ) isprime ) sum ) /素数时,统计量为1count; 返回; }if(index==n|||nowkk )/n个处理完毕或超过k个时,返回return; DFS (索引1,nowk 1,sum p [索引] ); //选择当前数量DFS (索引1,nowk,sum ); //不选择当前数量(}int main ) ) {count=0; scanf('%d%d ),n,k ); for(intI=0; in; I ) scanf('%d ',p[i]; } DFS (0,0,0 ); printf(%d(n ),count ); 返回0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。