每个程序员1小时内必须解决的5个编程问题之多种方法

来源:互联网 发布:powerdvd是什么软件 编辑:程序博客网 时间:2024/06/04 20:04

在这几天里,不断有各种方法涌现出来,下面就来贴上几个解决方法,如果按这些方法,真的不用一个小时就完工,关键要你想得到!

下面是问题:

问题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 mathgr = (1 + math.sqrt(5)) / 2def fibonacci(n):    return (math.pow(gr, n) - math.pow(1 - gr, n)) / math.sqrt(5)total = 0for 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 aprint(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 functoolsdef 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 functoolsdef 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)) )      )

解决问题5的另外两种方法:

#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')

只要多思考,还是有很多办法的。



0 0
原创粉丝点击