在这几天里,不断有各种方法涌现出来,下面就来贴上几个解决方法,如果按这些方法,真的不用一个小时就完工,关键要你想得到!
下面是问题:
问题3
编写一个计算前100位斐波那契数的函数。根据定义,斐波那契序列的前两位数字是0和1,随后的每个数字是前两个数字的和。例如,前10位斐波那契数为:0,1,1,2,3,5,8,13,21,34。
问题4
编写一个能将给定非负整数列表中的数字排列成最大数字的函数。例如,给定[50,2,1,9],最大数字为95021。
问题5
编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100。
后面是解决这些问题的一系列方案:
解决问题3的代码:
import math gr = (1 + math.sqrt(5)) / 2 def fibonacci(n): return (math.pow(gr, n) - math.pow(1 - gr, n)) / math.sqrt(5) total = 0 for i in range(0, 100): total = total + fibonacci(i) print(total) def f(n): if n == 0: return 0 if n == 1: return 1 return f(n-1) + f(n-2) print(f(100)) def fib3(n): a, b = 0, 1 for i in range(n): a, b = b, a+b return a print(fib3(100))这里共使用三种方法解决。
解决问题4的两种方法:
#python 3.4.3 win7 #问题4 #编写一个能将给定非负整数列表中的数字排列成最大数字的函数。例如,给定[50,2,1,9],最大数字为95021。 #数字序列 #NumList = [950, 201, 1, 9,980,99,909] NumList = [45,4,43, 45456,45452, 44, 445, 45] #找出能放到最高位数的最大数字 def FindMaxNum(nlist): temp = [] for i in nlist: numLen = len(str(i)) temp.append(int(i/pow(10,numLen - 1))) tempSort = temp[:] tempSort.sort() for i in range(len(temp)): if temp[i] == tempSort[-1]: return i; return 0 #相同位数的数字要进行值比较,取回最大值的。 def FindValMax(index, nlist): last = nlist[index] count = len(str(last)) for i in range(len(nlist)): if count == len(str(nlist[i])) and nlist[i] > last: last = nlist[i] index = i return index #比较相邻值是否需要交换 def ReSort(nlist): if len(nlist) < 2: return for i in range(len(nlist)-1): temp1 = nlist[i] temp2 = nlist[i+1] val1 = int(str(temp1) + str(temp2)) val2 = int(str(temp2) + str(temp1)) if val1 < val2: nlist[i], nlist[i+1] = nlist[i+1],nlist[i] # def main(): temp = NumList[:] target = [] while len(temp) > 0: index = FindMaxNum(temp) index = FindValMax(index, temp) target.append(temp[index]) del temp[index] # print(target) i = 0 while i < len(target): i += 1 ReSort(target) print(target) print('###########################') print(large(NumList)) # import functools def large( nums ): return ''.join( sorted( [str(n) for n in nums], key=functools.cmp_to_key(lambda x,y:int(y+x)-int(x+y)) ) ) #入口函数 if __name__ == "__main__": main()
# import functools def large( nums ): return ''.join( sorted( [str(n) for n in nums], key=functools.cmp_to_key(lambda x,y:int(y+x)-int(x+y)) ) )
# op = ('+', '-', '') for a in range(0,3): for b in range(0,3): for c in range(0,3): for d in range(0,3): for e in range(0,3): for f in range(0,3): for g in range(0,3): for h in range(0,3): lhs = '1'+op[a]+'2'+op[b]+'3'+op[c]+\ '4'+op[d]+'5'+op[e]+'6'+op[f]+\ '7'+op[g]+'8'+op[h]+'9' res = eval( lhs ) if ( res == 100 ): print( lhs+'=100') print('##################') def f( n, eq ): if n==10: if eval(eq)==100: print(eq + '=100') return f( n+1, eq+'+'+str(n) ) f( n+1, eq+'-'+str(n) ) f( n+1, eq+str(n) ) f(2, '1')