栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python蓝桥31天,第三天

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python蓝桥31天,第三天

1. 排他平方数 题目描述

解析:

一开始真没读懂这个题,读了好几遍终于明白了
其实就是让你求2014年减去n年后,那一年的年份各个数字之和等于n

代码
count = []
for i in range(1900,2014):
    if 2014 - i == sum([int(m) for m in list(str(i))]):
        count.append(i)
print(min(count)) # 输出的小明的
2.纸牌三角形 题目描述

解析:

将所有有可能的排序方式全部找出来,9个数字,排列组合A(m=9,n=9)种组合方式,这些组合种一定有1-4个数的和== 4-7个数的和 = = 7-1个数的和(用了Python的内置函数,不过我建议还是看一看手写怎么做,毕竟内置这个内置函数很少用)
因为每种组合都有它的镜像2个和旋转3个,所以要除以6

代码
import itertools
count = 0
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in itertools.permutations(a, 9):
    w = list(i)
    if w[0] + w[1] + w[2] + w[3] == w[3] + w[4] + w[5] + w[6] == w[6] + w[7] + w[8] + w[0]:
        count+=1
print(count//6)
3.纸牌三角形 题目描述

解析:(动态规划版本)

根据题意,知道三个要点:1. A先取;2. 只能取1/3/7/8个球;3. 最后取的人失败

可以推断出

A为了赢,就要在A取出1/3/7/8个球后,让B只能取最后的球自己算一下,在1-8的范围内,谁面临2/4/6/8个球的局面,谁赢,谁面临1/3/5/7的局面谁死

2:A取1剩14:A取3剩15:A取1B取1循环最后,A死;A取1B取1A取3,A死;A取1B取3A取1,A死;A取3B取1A取1,A死;【无论如何谁首先遇到5谁就死】6:A取1剩57:A取1B面临6,A死;A取3B面临4,A死,A取7,直接死【无论谁首先遇到7谁就死】8:A取1剩7 可以看出这是一个动态规划,建立一个一维数组dp[ ],index表示球的数量,value用1和0分别表示赢和输;

012345678910
001010101

根据题意:
dp[i-1/3/7/8]==0 ,dp[i] = 1
PS:说明:谁第一个面临i个球,都会有1/3/7/8四种取球方式,如果在做出其中一种取球动作时候,遇到了必死的局面,也就是i-1/3/7/8后等于必死数目的时候,比如取完后只剩下1/3/5/7个球,说明i这个数真的可以处,能弄死下一个人它真让你弄死,所以赋值
这里是相似的写法,同时感谢大佬指点,如果我的不明白可以看这个,至少我是看明白了!

代码
dp = [0 for i in range(10001)]
dp[2] = dp[4] = dp[6] = dp[8] = 1
for i in range(9,len(dp)):
    if dp[i - 1] == 0:
        dp[i] = 1
    elif dp [i - 3] == 0:
        dp[i] = 1
    elif dp[i-7] == 0:
        dp[i] = 1
    elif dp[i-8] == 0:
        dp[i] = 1
n = int(input())
for i in range(n):
    print(dp[int(input())])
代码(递归版本——超时)
# def boolen_(n):
#     if n == 1: return False
#     if n > 8 and boolen_(n-8) == False :return True
#     if n > 7 and boolen_(n-7) == False :return True
#     if n > 3 and boolen_(n-3) == False :return True
#     if n > 1 and boolen_(n-1) == False :return True
#     return False
#
# n = int(input())
# for i in range(n):
#      m = int(input())
#      if boolen_(m):
#          print(1)
#      else:
#          print(0)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/756799.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号