题意:
给定n,s,k以及n个数,然后用n个数中的k个加起来刚好等于s。
input:
第一行为测试数据量;
第二行为n,k,s;
第三行为n个数
output:
满足题意要求的情况总数。
Example
input:
1
10 3 10
1 2 3 4 5 6 7 8 9 10
output:
4
思路:
很明显,此题需要利用递归,而递归的深度即为k值,递归的终点即为K个值得和为s.
首先明确递归函数的终点,达到要求则count++,返回上一层循环,否则直接略过。
其次要明白循环的过程,首先从第一个数开始循环,而且最多循环到n-k,以保证能够取到k个数,进入下一层循环时,sum值要加上这个数,同样k值要减一,i值要加一,否则一个数算上两次或多次,避免这样的情况发生。对于每个单层递归,也需要进行for循环,使每个数都能遍历到。
最后得到的count即为所求。
总结:
此题利用递归穷举所有的情况,并判断是否满足题意,弄清楚每层递归之间或单层递归之间所有变量的变化,然后弄清递归的结果判断。
代码:
#include<iostream></