腾讯马拉松之数列求和(python 实现)
2012-09-08 22:34
363 查看
数列求和
![](http://wenda.hiall.com.cn/data/companylogo/logo34.jpg)
返回比赛首页
给定n个数字和一个范围[x,y],求从这n个数字中任意取出一些数字,使得它们的和在范围[x,y]中有多少种取法。输入:
输入第一行为整数case,case<=10 表示有case组测试数据。
对于每一组测试数据,第一行为一个整数n (n<=30),第二行为n个整数a[i],第三行为两个整数x和y。其中,a[i]>=0,sum(a[i])<2^31,0<x,y<sum(a[i]).<x,y<sum(a[i])<
span="">
输出:
对于每组数据输出一行,总的取法数。
样例输入:
2
3
1 2 4
1 7
3
1 2 4
2 5
样例输出:
7
4
(Hint: 比如有3个数字 有8种不同的取法)
f=open("c:/num.txt",'r') record = f.readlines() for i in record: print i group = int(record[0]) record = record[1:] for ii in range(0,group): num = int(record[0]) numList = [int(i) for i in record[1].strip('\n').split(' ')] x,y = [int(i) for i in record[2].strip('\n').split(' ')] record = record[3:] c = cal(num,numList,x,y) print c def val(l,x,y): sum = 0 for i in l: sum += i if sum >= x and sum <= y: return 1 else: return 0 def combin(items, n=None): if n is None: n = len(items) for i in range(len(items)): v = items[i:i+1] if n == 1: yield v else: rest = items[i+1:] for c in combin(rest, n-1): yield v + c def cal(num,numList,x,y): count = 0 for i in range(len(numList)): for j in combin(numList, i+1): if val(j,x,y): count +=1 return count f.close()
相关文章推荐
- 关于python实现二维数组所有元素求和
- 斐波那契数列[剑指offer]之python实现
- Python:斐波那契数列递归实现方法
- 用Python实现fib数列的几个方法(yield的应用)
- python 实现求和、计数、最大最小值、平均值、中位数、标准偏差、百分比。
- 斐波那契数列的算法实现 —— python
- python尾递归实现斐波那契数列
- 斐波拉切数列(python实现)
- python递归式的实现斐波那契数列
- Python实现求数列和的方法示例
- Python实现PAT1030 完美数列
- 剑指offer-9-Python实现斐波那契(Fibonacci)数列
- Python3 下实现 腾讯人工智能API 调用
- python实现列表对应元素求和的两种方法
- python如何实现快速的求和函数
- Python 实现斐波那契数列 (黄金分割数列)
- Fibonacci(斐波那契)数列的递归与非递归实现 python
- python实现经典算法(2):Fibonacci(斐波那契)数列
- 用python实现一个抓取腾讯电影的爬虫
- 用Python实现一个1加到n求和功能的函数