python学习习题总结(9)——练习题猴子桃子,7个数字组成的奇数。。。

#题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数,//m=3
nums = [1,2,3,4,5,6,7,8,9,0]
chnums = nums[3:]
chnums.extend(nums[0:3])
print(chnums)
#第二种方法,移位
m = 3
for i in range(m):
    last = nums[-1]
    for j in range(len(nums)-1):
        nums[j-1] = nums[j]
    nums[len(nums)-2] = last
print(nums)
#题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
import copy
n = [i for i in range(1,35)]
print(n)
count = 0
while True:
    remind = []
    for i in range(len(n)):
        count += 1
        if count % 3 == 0:
            continue
        remind.append(n[i])
    n = remind.copy()          #copy
    print(n)
    if len(remind)==1:
        break
#海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又
#平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
remind = 4
while True:
    peachs = remind
    for i in range(5):
        if peachs % 4 == 0:
            peachs = (peachs / 4) * 5 + 1
        else:
            break
    else:
        break
    remind += 4
print(peachs)
#求0—7八个数字所能组成的所有的奇数的个数(数字中没有重复数,例11不算),输出这些数,两种方法效率比较,第二种效率优,第一种简短
from datetime import datetime
start = datetime.now()   ##效率比较
lst = []
for i in range(76543210):
    if i&1:
        i = str(i)
        if len(set(i)) == len(i):
            if '8' not in i and '9' not in i:
                lst.append(i)
delta = (datetime.now()-start).total_seconds()
print(delta)
print(len(lst))
print('~~~~~~~~~~~~~~~~~'*5)
start = datetime.now()                   #当作8进制计数[0,7],只要去重就可以了
bina = [0]
count = 0
nums = []
maxs = int('76543210',8)
while True:
    bina[0] += 1
    for i in range(len(bina)):
        if bina[i] == 8:                 #加flag优化,一次没变直接跳出循环
            if len(bina) == i+1:
                bina.append(0)
            bina[i] = 0
            bina[i+1] += 1
    count += 1
    if count & 1:
        if (len(bina) == len(set(bina))):
            nums.append(''.join(map(str,bina[::-1])))
    if count == maxs:
        break
delta = (datetime.now()-start).total_seconds()
print(delta)
print(len(nums))
'''只求个数的话:4*6*5*4*3*2*1*7 + 4*6*5*4*3*2*6 + 4*6*5*4*3*5 + 4*6*5*4*4 + 4*6*5*3 + 4*6*2 + 4*1'''
sum = 0
for i in range(7):
    tmp = 1
    num = 6
    for j in range(i):
        tmp *= num
        num -= 1
    sum += 4*tmp*(i+1)
print(sum)
print('~~~~~~~~~~~~~~~~~'*5)
#输出2进制序列 0,1,10,11,100,101,110,111,1000,8进制同样适用,只修改一个数
bina = [0]
count = 0
nums = []
while True:
    bina[0] += 1
    for i in range(len(bina)):
        if bina[i] == 2:
            if len(bina) == i+1:
                bina.append(0)
            bina[i] = 0
            bina[i+1] += 1
    num = 0
    for i in range(len(bina)):
        num += bina[i]*10**i 
    nums.append(num)          #nums.append(''.join(map(str,bina[::-1])))
    count += 1
    if count == 10:
        break
print(nums)
print(bina)






猜你喜欢

转载自blog.csdn.net/qq_33287645/article/details/79845435