冼镜光《C语言名题百则 》 的python实现
剑有偏锋
github.com/baidang201
www.jianshu.com/u/349d823c5236 剑有偏锋
客户端软件开发工程师,精通C++,目前学习区块链技术。熟悉golang python C#
前能建站,后能爬虫
展开
-
1.1 最长平台
# -*- coding: cp936 -*-'''问题:已知一个已经从小到大排序好的数组,说这个数组中的一个平台,就是连续的一串值相同的元素,并且这一串元素不能再延伸。例如,在1,2,2,3,3,3,4,5,5,6中1,2.2,3.3.3,4,5.5,6都是平台。3.3.3为最长平台试编写一个程序,接收一个数组,把这个数组中的最长平台找出来。感觉有点像求最长序列和'''def原创 2013-05-28 20:42:59 · 1150 阅读 · 1 评论 -
格雷码
# -*- coding: UTF-8 -*-'''方法1假设原始的值从0开始,格雷码产生的规律是:第一步,改变最右边的位元值;第二步,改变右起第一个为1的位元的左边位元;第三步,第四步重复第一步和第二步,直到所有的格雷码产生完毕(换句话说,已经走了(2^n) - 1 步)。方法2递归产生在实现的时候,我们完全可以利用递归,在每一层前面加上0或者1,然后就可以列出所有的格雷码。比原创 2013-06-28 22:06:13 · 1609 阅读 · 0 评论 -
集合的子集 (其实是组合问题)
# -*- coding: UTF-8 -*-'''列出一个列表所有子集,包括空集合可以通过二进制数来确定某个元素是否选取另外有个递归的方法可以实现'''#1 这里有个坑,bin转换出来的字符串有0b前缀,如bin(9)为‘0b1001’#处理时需排除掉'0b',从下标2开始处理#2 另外的问题,bin转换的二进制字符串不懂怎么格式化为固定位数,不够补前导零 # 其实避原创 2013-06-28 22:11:10 · 699 阅读 · 0 评论 -
求出n中选r个的组合系数c(n,r),只用加法实现 即 求二项式系数(杨辉三角),
# -*- coding: UTF-8 -*- '''求二项式系数(杨辉三角),求出n中选r个的组合系数c(n,r),只用加法实现我写的算法,加法效率漏了点。。。'''def ComputCnr(n, r): listArr=[0]*(r+1) #python有类似动态存储分配的,挺不错的 if r>=n/2: r=n-r listArr[0]=1 count=0原创 2013-06-17 21:59:11 · 1445 阅读 · 0 评论 -
连续整数的固定和
# -*- coding: UTF-8 -*- '''输入一个正整数,把所以连续数和为给定正整数的序列找出来如输入27, 有2~7 8~10 13~14当然,输入4 16时无解其实还有另外一个思路, sumOfGiven=(indexfirst + indexlast)*count/2indexlast=indexfirst+count-1sumOfGiven已知,遍原创 2013-06-15 21:12:58 · 645 阅读 · 0 评论 -
数值自乘非递归解
# -*- coding: UTF-8 -*- '''求m^n,非递归方法原理嘛:如求m^1313=2^3+2^2+2^0则m^(13)=m^(2^3+2^2+2^0)且一般地,有m^(2^3)= m^(2^2) * m^(2^2) = (m^(2^2) )^2'''def ComputPower(m, n): if m<0 or n<0: return -1原创 2013-06-13 21:18:50 · 530 阅读 · 0 评论 -
Armstrong数 (水仙花数)
# -*- coding: UTF-8 -*- '''在三位的正整数中,例如abc,有一些可以满足a^3 + b^3 + c^3 = abc的条件(a3表示a的三次方),也就是说各位的立方和正好是该数的本身,这样的数称为armstrong数,试求出所有的三位armstrong数,需要考虑效率问题推理 三个数之和至少为4 至多为24sumO=a**3 + b**3 + c**3和s原创 2013-06-04 22:14:17 · 1436 阅读 · 0 评论 -
因式分解
# -*- coding: UTF-8 -*- '''因式分解编写一个程序,读入一个正整数,把它的搜有质因子找出来。先求小于N的质数,再分解'''def ProductListPrime(listPrime, num): flistTemp=[ 1 for x in range(0, num+2)] flistTemp[0]=0 flistTemp[1]=0 for i in原创 2013-06-11 21:35:03 · 738 阅读 · 0 评论 -
等值首尾和
xxxxxxxxxxx# -*- coding: cp936 -*-'''等值首尾和假设有一个数组x[],它有n个元素,每一个都大于零;称x[0]+x[1]+…+x[i]为前置和(Prefix Sum),而 x[j]+xlj+1]+…+x[n-1]为后置和(Suffix Sum)。试编写一个程序,求出 x[]中有多少组相同的前置和与后置和。【说明】如果x[]的元素是3,6,2原创 2013-06-02 20:35:20 · 636 阅读 · 0 评论 -
数值自乘递归解
# -*- coding: UTF-8 -*- '''如果n与m是正整数,那么求m^n,用二分法n=0 return 1n=奇数 return m^n/2 * m^n/2 * mn=偶数 return m^n/2 * m^n/2'''def ComputRPower(m, n): if n==0: return 1 if n%2 == 1: te原创 2013-06-11 21:53:55 · 540 阅读 · 0 评论 -
支配值数目
# -*- coding: cp936 -*-'''支配值数目已知f[]与g[]两个整数数组,元素已经从小到大排列,请写一个程序,算出f[]中比g[]元素大的对数。换句话说,f[0]比g[]中多少个元素大,f[1]比g[]中多少元素大等,这些值的总和就是要求的答案。'''def ComputSumOfBigger(fList , gList): if (len(gList)原创 2013-05-29 21:03:17 · 776 阅读 · 0 评论 -
两数组最短距离
# -*- coding: cp936 -*-'''两数组最短距离已知两个元素从小到大排列的数组x[]与y[],请编写一个程序算出两个数组元素彼此之间差的绝对值中最小的一个数,此值称做数组的距离。【说明】如果x[i]与y[j]是两个元素,那么lx[i]-y[j]l就是这两个元素之间的距离,所有填些距离 的极小值,称为数组的距离。比如说x[]有1,3,5,7,9,y[]有2,6原创 2013-05-31 21:49:32 · 2027 阅读 · 0 评论 -
求素数
# -*- coding: UTF-8 -*- import mathfrom timeit import Timer'''这章求素数用到了朴素求素数,筛选法求素数,线性筛选法求素数(线性筛选学得不成熟)'''#求前N个质数def ComputPrimeNomalFirstN(firstN): listPrime=[2,3] num=5 while(len(listPrim原创 2013-06-09 22:27:30 · 530 阅读 · 0 评论 -
等值数目
# -*- coding: cp936 -*-'''等值数目问题描述:已知两个整型数组f[]和g[],它们的元素都已经从小到大排列,并且每个数组中的元素各是各不相同的。例如,f[]中可能是1,3,4,7,9而g[]中可能是3,5,7,8,10。请写一个程序算出这两个数组中有多少组元素是相等的。例如f[2]=g[1]=3,f[4]=g[3]=8,因此上面的例子有两组。'''def C原创 2013-05-30 21:11:14 · 646 阅读 · 0 评论 -
旋转法求排列
# -*- coding: UTF-8 -*- '''旋转法求排列,比预想的简单,或许以前看过这个算法'''def ProductPermut(listYuan, numOfXuanZhuan): if numOfXuanZhuan == 1: print listYuan return for i in range(0, numOfXuanZhuan): Product原创 2013-06-29 22:40:46 · 533 阅读 · 0 评论