zoukankan      html  css  js  c++  java
  • python -- 算法

    给定四个数字,找出不重复的排列组合可能

    
    # 黑魔法方法,还纳闷 lambda 不能 yield 其实把 [] 改为小括号即是生成器啦
    
    func = lambda num_tuple:((i,j,k,n) for n in num_tuple for k in num_tuple for j in num_tuple for i in num_tuple 
    if i!=j and i!=k and i!=n and j!=k and j!=n and k!=n )
    for n in func((1,2,3,4)):
    print(n)
    
    >>> num = (1,2,3,4)
    >>> def func(num_tuple):
    ... for i in num_tuple:
    ... for j in num_tuple:
    ... for k in num_tuple:
    ... for n in num_tuple:
    ... if i is not j and i is not k and i is not n and j is not k and j is not n and k is not n:
    ... yield int(i)*1000 + int(j)*100 + int(k)*10 + int(n)
    ...
    >>> for n in func(num):
    ... print(n)
    ...
    1234
    1243
    1324
    1342
    1423
    1432
    2134
    2143
    2314
    
    ....省略....
    
    
    
    # 要求:
    
    # 企业实行阶梯制销售绩效方案。现规定:
    
    # 销售额低于或等于10万时,提成10%;
    
    # 销售额低于或等于20万时,超过10万的部分提成7.5%,其他从上;
    
    # 销售额低于或等于40万时,超过20万的部分提成5%,其他从上;
    
    # 销售额低于或等于60万时,超过40万的部分提成3%,其他从上;
    
    # 销售额低于或等于100万时,超过60万的部分提成1.5%,其他从上;
    
    # 销售额高于100万元时,超过100万的部分提成1%,其他从上。
    
    # 要求输入某人的销售额,得出应发绩效。
    
    # 分析:
    
    # 1.利用数轴来分界,定位。
    
    def switch(flag):
        return {'lt10':0.1,'10_20':0.075,'20_40':0.05,'40_60':0.03,'60_100':0.015,'gt100':0.01}.get(flag,0)
    
    def kpi_func(amount):
        base_amt = (10**4)
        bonus_1 = 10*base_amt*switch('lt10')
        bonus_2 = bonus_1 + 10*base_amt*switch('10_20')
        bonus_3 = bonus_2 + 20*base_amt*switch('20_40')
        bonus_4 = bonus_3 + 20*base_amt*switch('40_60')
        bonus_5 = bonus_4 + 40*base_amt*switch('60_100')
        
        
        if amount<=10*base_amt:
            return amount*switch('lt10')
        elif amount<=20*base_amt:
            return bonus_1+(amount-10*base_amt)*switch('10_20')
        elif amount<=40*base_amt:
            return bonus_2 + (amount-20*base_amt)*switch('20_40')
        elif amount<=60*base_amt:
            return bonus_3 + (amount-40*base_amt)*switch('40_60')
        elif amount<=100*base_amt:
            return bonus_4 + (amount-60*base_amt)*switch('60_100')
        else:
            return bonus_5 + (amount-100*base_amt)*switch('gt100')
        
    
    
    # 要求:
    
    # 设有整数i,i+100是一个完全平方数,再加168又是一个完全平方数,求出该整数的值。
    
    # 分析:
    
    # 在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
    >>> def is_square_totally(x):
    ...     for i in range(1,x):
    ...         if i**2 == x:
    ...             return True
    ...     return False
    
    >>> i=1
    >>> while True:
    ...     if is_square_totally(i+100) and is_square_totally(i+168):
    ...         print(i)
    ...         break
    ...     i+=1
    
    # 要求:
    
    # 输入三个整数xyz,并将其按大小顺序输出。
    
    # 分析:
    
    # 慢一点的话,就是挨个比较大小,不过Python列表可以用sort函数,所以就方便多了。
    i = input('请输入第一个数:')
    j = input('请输入第一个数:')
    k = input('请输入第一个数:')
    l = []
    l.append(int(i))
    l.append(int(j))
    l.append(int(k))
    sorted(l,reverse=True)
    
    # 一句话 python 打印 99 乘法表
    print('
    '.join(['	'.join(['{}*{}={}'.format(i,j,i*j) for j in range(1,i+1)]) for i in range(1,10,1)]))
    
    print ('
    '.join([' '.join(['%s*%s=%-2s' % (y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)]))
    
    for i in range(1,10,1):
        for j in range(1,i+1,1):
            print('{}*{}={}	'.format(i,j,i*j),end='')
        print()
    
    
    # 输出国际象棋棋盘
    import sys
    for i in range(8):
        for j in range(8):
            if(i + j) % 2 == 0:
                sys.stdout.write(chr(219)+' ')
               # sys.stdout.write(chr(219))
            else:
                sys.stdout.write(chr(1)+' ')
        print('')
    Û  Û  Û  Û  
     Û  Û  Û  Û 
    Û  Û  Û  Û  
     Û  Û  Û  Û 
    Û  Û  Û  Û  
     Û  Û  Û  Û 
    Û  Û  Û  Û  
     Û  Û  Û  Û 
    
    # 打印楼梯
    for i in range(1,6,1):
        print(' '*(6-i),end='')
        print('#'*i)
        
    print('
    '.join(['
    '.join([' '*(6-i)+'#'*i]) for i in range(1,6,1)]))
    
    # 水仙花数 , 某个数 个十百 等 每个位置上的 数字 3次幂 等于该数本身
    print([ i for i in range(100,1000) if sum([pow(int(str(i)[k]),3) for k in range(3)]) == i ])
    
    def func():
        for n in range(100,1000):
            i = n//100
            j = n%100//10
            k = n%10
            if i**3+j**3+k**3 == n:
                yield n
    for n in func():
        print(n)
    
    # 1-100 质数
    [n for n in range(1,100) if not [ m for m in range(2,n) if n%m == 0]]
    
    如果有来生,一个人去远行,看不同的风景,感受生命的活力。。。
  • 相关阅读:
    Struts2的常见的配置文件介绍
    第一个Struts2实例之hello world!
    Highcharts实现图形报表(我主要实现javaweb开发的图形报表)
    基于jsp+servlet图书管理系统之后台用户信息删除操作
    基于jsp+servlet图书管理系统之后台用户信息修改操作
    基于jsp+servlet图书管理系统之后台用户信息查询操作
    基于jsp+servlet图书管理系统之后台用户信息插入操作
    初识Jsp,JavaBean,Servlet以及一个简单mvc模式的登录界面
    Java中IO流,输入输出流概述与总结
    【转】Android 创建AVD各参数详解
  • 原文地址:https://www.cnblogs.com/Frank99/p/9267079.html
Copyright © 2011-2022 走看看