• python 100题


    网上搜查到的Python算法题,自己思考完成

    【程序1】 
    题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数(比如121,212,题目应该是无连续重复数字)都是多少? 
    程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。

    自己写的(这个“无重复数字”存在异议):

    list=[1,2,3,4]
    list1=[]

    i=None
    j=None
    K=None
    for i in list:
    for j in list :
    for k in list :
    num=i*100+j*10+k
    list1.append(num)
    if i==j or j==k :
    list1.pop()
    print(list1)
    sum=len(list1)
    print(sum)
    题目原答案:
    sum=0 for i in range(1,5,1): for j in range(1,5,1): for k in range(1,5,1): if(i!=j&j!=k): sum=sum+1; print i,j,k # 这里去重 print sum
    【程序2】 
    题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 

    自己写的:
    a=input('请输入当月利润:')
    num=int(a)
    bonus=None

    def jisuan(num):
    if num<=10:
    bonus=num*0.1
    elif num>10 and num<=20:
    bonus=10*0.1+(num-10)*0.075
    elif num >20 and num<=40:
    bonus=10*0.075+10*0.1+(num-20)*0.05
    elif num>40 and num<=60:
    bonus=10*0.075+10*0.1+20*0.05+(num-40)*0.03
    elif num>60 and num<=100:
    bonus=10*0.075+10*0.1+20*0.05+20*0.03+(num-60)*0.015
    else:
    bonus=10*0.075+10*0.1+20*0.05+20*0.03+40*0.015+(num-100)*0.01
    return bonus

    a=jisuan(num)
    print(a)

    原答案:
    #coding:utf-8 #题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%; # 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分 # ,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万 # 之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提 # 成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求 # 应发放奖金总数?
    bonus1=100000*0.1
    bonus2=bonus1+100000*0.75
    bonus4=bonus2+200000*0.5
    bonus6=bonus4+200000*0.3
    bonus10=bonus6+400000*0.15
    mon = input("请输入月利润: ")
    if mon<=100000: bonus=mon*0.1
    else:
      if mon<=200000: bonus=bonus1+(mon-100000)*0.075
      else:
        if mon <= 400000: bonus = bonus2 + (mon - 200000) * 0.05
        else:
          if mon <= 600000: bonus = bonus4 + (mon - 400000) * 0.03
          else:
            if mon <= 1000000: bonus = bonus6 + (mon - 600000) * 0.015
            else:
               if mon > 1000000: bonus = bonus10 + (mon - 1000000) * 0.01 print bonus
    自己写的虽然已经实现,还是需要修改代码
    【程序3】 
    题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? (范围都没给????)
    自己写:
    import math
    for i in range(100000):
    if (math.sqrt(i+100)-int(math.sqrt(i+100))==0) and (math.sqrt(i+268)-int(math.sqrt(i+268))==0) :
    print(i)

    答案:

    #coding:utf-8
    import math
    #题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

    #第一种解法 判断x,y开方同时为整数即可
    print '解法一'
    for i in range(100000):
    if(math.sqrt(i+100)-int(math.sqrt(i+100))==0):
    x = int(math.sqrt(i + 100)) # 开方求x x为浮点数
    if (math.sqrt(i + 268) - int(math.sqrt(i + 268)) == 0):
    y = int(math.sqrt(i + 268)) # 开方求x x为浮点数
    print x,y
    print '该数为%d' %i

    #第二种 直接求x*x-y*y=168
    print '解法二'
    for i in range(10000):
    for j in range(1000):
    if(i*i-j*j==168):
    print i,j
    print '该数为%d' %(i*i-268)

    #第三种 标准解法
    print '解法三'
    for i in range(100000):
    if(math.sqrt(i+100)-int(math.sqrt(i+100))==0):
    x = int(math.sqrt(i + 100)) # 开方求x x为浮点数
    if (math.sqrt(i + 268) - int(math.sqrt(i + 268)) == 0):
    y = int(math.sqrt(i + 268)) # 开方求x x为浮点数
    if(x*x==i+100 and y*y==i+268):
    print x, y
    print '该数为%d' % i

    【程序4】 
    题目:输入某年某月某日,判断这一天是这一年的第几天? 
    程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。 

    #平年
    listmonthrun=[0,31,28,31,30,31,30,31,31,30,31,30,31]
    #闰年
    listmonthping=[0,31,29,31,30,31,30,31,31,30,31,30,31]

    try:
    str=input('请输入日期,格式xxxx-xx-xx:')
    days=0
    year,month,day=str.split('-')
    year=int(year)
    month=int(month)
    day=int(day)

    print(type(year),month,day)

    if (year%400==0) or (year%4==0 and year%100!=0):
    for i in range(0,month):
    # print(i)
    print(listmonthping[i])
    days+=listmonthping[i]

    else:
    for i in range(0,month):
    # print(i)
    print(listmonthrun[i])
    days+=listmonthrun[i]
    days=days+day

    print('这一天是这一年中第%s天'%(days))
    except Exception as e:
    print('输入时间格式有误请重新输入')

    答案:

    #coding:utf-8
    data=raw_input('输入年月份,格式2016-05-12:')
    #字符串切割
    s=data.split('-')#以-为标志切割
    if(len(s)==3):
    # 赋值
    year = int(s[0])
    mon = s[1]
    day = s[2]
    print mon
    # python没有switch case 用字典方式
    else:
    print '输入有误'
    da={'1':0,'2':31,'3':59,'4':90,'5':120,'6':151,'7':181,'8':212,'9':243,'10':273,'11':304,'12':334}
    def f(x):
    return da.get(x)
    sum=int(f(mon))+int(day)
    if(year%400==0 or (year%4==0 and year%100!=0)):
    if(int(mon)>=3):
    sum=sum+1
    print sum

    【程序5】 
    题目:输入三个整数x,y,z,请把这三个数由小到大输出。

    自己写:

    list1=[]
    print('请输入三个整数:')
    a=int(input('第一个数:'))
    list1.append(a)
    b=int(input('第二个数:'))
    list1.append(b)
    c=int(input('第三个数:'))
    list1.append(c)
    #将三个数加入到列表中

    #解法一:使用排序法
    def paixu(list):
    for i in range(0,len(list)):
    for j in range(i+1,len(list)):
    if list[i] >list[j]:
    temp=list[i]
    list[i]=list[j]
    list[j]=temp
    return list

    def printout(list):
    for i in list:
    print(i)

    list2 = paixu(list1)
    printout(list2)
    #解法二:使用python内置函数
    print(list1)
    list1=sorted(list1)
    printout(list1)

    答案:太过繁琐

    【程序6】 
    题目:输出9*9口诀。 
    for i in range(1,10):
    for j in range(1,i+1):
    print('%d*%d=%d'%(i,j,i*j),end=' ')
    print()

    答案:有点繁琐
    【程序7】 
    题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 

    程序分析:斐波那契数列 即1,1,2,3,5,8,13,21…. 第三个数开始下一个数为前面两个数之和
    #m1表示第一个月,m2表示第二个月

    m1=m2=1

    for i in range(1,13):
    if i<=2:
    print(m1)
    else:
    m1=m1+m2
    m2=m2+m1
    print(m1,m2)



    【程序7】 
    题目:判断101-200之间有多少个素数,并输出所有素数。 
    程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。
    import math
    for i in range(101,201):
    num=math.sqrt(i)
    if i%2==0 or i%num==0:
    pass
    else:
    print(i)

    题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
    for i in range(100,1000):
    #百位
    num1=int(i/100)
    #十位
    num2=int(i/10)%10
    #个位数
    num3=i%10
    if i==(num1**3+num2**3+num3**3):
    print(i)






  • 相关阅读:
    Restful API 指南
    git submodule 使用小结
    git 在 A 项目中引用 B 项目
    Error Permission denied when running brew cleanup
    @Scope注解设置创建bean的方式和生命周期
    spring常用注解
    Spring的AOP配置文件和注解实例解析
    java线程的状态
    java线程执行的优先级
    java创建线程的方法
  • 原文地址:https://www.cnblogs.com/zzzao/p/8630910.html
Copyright © 2020-2023  润新知