中级编程通关练习题 #5 – 二项展开式

给定一个字符串包含数学算式(ax + b)^ n,a 和 b都是整数,n 为正整数。实现一个函数把它做二项式展开。譬如,字符串"(-2x-3)^5" 做二项式展开后的结果是: -32x^5-240x^4-720x^3-1080x^2-810x-243。 输入样例: "(-3y+5)^7" 输出样例: -2187y^7+25515y^6-127575y^5+354375y^4-590625y^3+590625y^2-328125y+78125 算法思路: 首先使用正则表达式把字符串中需要的数值和数学符合提取出来然后按照二项式的计算公式将它展开,注意下面的特殊情况如果 n 是 0,那么返回值是 1如果 n 是 1, 那么返回值是 ax + b如果 b 是 0, 那么返回值是…

初级编程通关练习题 #12 – 寻找立方数

给定一个字符串里面包括有文字和数字,请编写一个函数把其中的数字全部提取出来,如果连续数字超过3个,需要分成两个数字或以上的数,然后查看每一个数字是否是立方数。所谓立方数,就是一个多位数的每一个数字立方之和等于它本身,譬如:数字 407是立方数,因为 43 + 03 + 73 = 407。函数的返回值就是所有立方数列表。 输入样例: "407233-0abde22479,ip address:153.254.162.107" 输出样例: [407, 0, 153, 560] 算法思路: 首先可以利用正则表达式从字符串中提取所有的数字,提取数字时每个数字的长度在1到3之间。检查提取出来的每个数字,如果是立方数就加入到函数返回列表中

高级编程通关练习题 #2:解析数学表达式

以字符串形式给定一条有效的数学表达式,使用字符串解析的方式计算该表达式的结果。注意不能使用 eval 方法来得出结果。 表达式的规则如下: 表达式里可能出现的数学操作符为:加(+)、减(-)、乘(*)、除(/)可能的数值包括正负数和小数需要分析可能出现的多重小括号,譬如:(15 * (9.5 + 6)- -10)/ 4 输入样例: "(-7 * -(16 / 4)) * (9.5 - 4.5)" 输出样例: 140.0 算法思路: 方法一:可以采用数据结构stack来逐一处理每个字符如果字符是数字或小数点,则添加到到临时字符串变量A中。如果字符不是数字或者小数点,则把临时变量A中的字符串转换成数字,然后压栈。如果是字符是数学操作符加减乘除或左小括号,就把该字符压栈。如果字符是右小括号,那么需要从栈顶弹出数值和操作符保存到临时变量B,直到遇到左小括号为止,然后将字符串B做数学计算。数学计算的顺序如下:先计算除法,然后计算乘法,接下来计算减法,最后计算加法。字符串循环读取完毕后,检查stack栈内是否为空,如果不为空则需要将栈内内容重复上面第三项操作。方法二:使用正则表达式来解析字符串以左右小括号为标志先后解析需要计算的表达式提取数学操作符和数值后做相应处理

入门级编程通关练习题 #17 – 字符串操作

给定一个字符串,根据下面的规则创建一个新的字符串:如果该字符串的结尾是数字,则把当前数字加一;如果结尾不是数字,那么把数字1添加到结尾。 输入样例: codeguru099 输出样例: codeguru100 算法思路: 方法一:可以借助正则表达式(regular expression)来匹配字符串结尾的数字,然后做修改。方法二:可以使用字符串函数 str.rstrip()来把结尾的数字剥离,然后做处理。

初级编程通关练习题 #4 – 寻找缺失数字

按照下面的格式给定一个仅包括加法符 +、减法符 - 和乘法符 * 的数学公式字符串: [数字] [操作符] [数字] = [数字] 算式中包括若干个问号?都代表同样的单个数字(0-9),而且该数字和算式中其他数字不重复。如果问号位于一个数字的首位,该问号不能为0。请找出符合要求的最小数字。譬如:"?*11=??",该问号是 2, 数字1已经存在,所以数字2是符合要求的最小值:2 * 11 = 22。 输入样例: "??*??=435?" 输出样例: 6 66 * 66 = 4356,所以问号代表的数字是 6。 算法思路: 要点:比较字符串算式是否成立,可以使用函数…