> 文档中心 > 刷题3.11+3.12

刷题3.11+3.12

目录

1.年龄巧合  694

  2.第几个幸运数字 613

 3.奇数倍数  818

4.迷宫 602

5.纸牌三角形  639

6.取球游戏  278


 

1.年龄巧合  694

def check(x):  x=str(x)  a=int(x[0])+int(x[1])+int(x[2])+int(x[3])  if a==2014-int(x):    return True  else:    return Falsey=[]for i in range(2014,1980,-1):  if check(i):    print(i)

  2.第几个幸运数字 613

1.暴力 

count=0for i in range(30):     for j in range(30):   for k in range(30): if 3**i*5**j*7**k<=59084709587505:      count+=1print(count-1)

2.优先队列

from queue import *num=[3,5,7]vis=set()q=PriorityQueue()for i in num:  q.put(i)res=0while not q.empty():  next_item=q.get()  res+=1  for every in num:    now=every*next_item    if now not in vis:      q.put(now)      vis.add(now)  if next_item==59084709587505:    print(res)    break

 3.奇数倍数  818

def check(x):  res=0  x=str(x)  for i in x:    if int(i)%2==1:      res+=1  if res==len(x):    return Truefor i in range(3,100):  a=i*2019  if check(a):    print(a)

4.迷宫 602

可以手算

1.用到bfs

2.用队列记录坐标,步数,方向

3.每记录一个坐标就打一个标记(越界,有障碍,有标记)continue

4.按照字典序从小到大的顺序走,下左右上的顺序,只要没有障碍和标记

import queueMap = """010101010010110010010101100101101001000010001010100000100010000010101001000010000000100110011010010101111011010010001000001101001011100011000000010000010000000010101000110100001010000010101010110010110001111100000010100001001010001010000010110000000011001000110101000010101100011010011010101011110111000110110101010010010010100000010001010011100000001010000010100010011010101011111001100001000011101000111000001010100001100010000001000101001100001001110001101000011100100010010101010101010100011010000001000010010000010100101010111010001010101000010111100100101001001000010000010101010100100100010100000000100000001010110011110100011000001010101000111010101001110000100001100001011001111011010000100010101010100001101010100101000010100000111011101001100000001011000100001011001011010010111000000001001010100100000001010010000100010000010001111010100100101001010101101001010100011010101101110000110101110010100001000011000000101001010000010001110000100000100011000011010110100000010010100100100001110110100101000101000000001110110010110101101010100001001010000100001101010100001000100010010001000101011010000100011001000100001010100101010101111101001000000100101000000110010100101001000001000000000010110100000010011101110010010000111010010110111010000000011010001000100010000000100001110100000011001110101000101000100010001111100010101001010000001000100000101001010010101100000001001010100010111010000011110000100001000000011011100000000100000000101110000001100111010111010001000110111010101101111000"""Map = Map.split('\n')n = 30m = 50vis = [[0 for i in range(m)] for j in range(n)]dir = [[1, 0], [0, -1], [0, 1], [-1, 0]]dir_s = "DLRU"q = queue.Queue()def bfs():    q.put((0, 0, 0, "")) #(x, y, step, path)    vis[0][0] = 1    while q.empty() == False: now = q.get() if now[0] == n - 1 and now[1] == m - 1:     print(now[3])     break for i in range(4):     next_x = now[0] + dir[i][0]     next_y = now[1] + dir[i][1]     if next_x = n or next_y = m:  continue     if vis[next_x][next_y] == 1:  continue     if Map[next_x][next_y] == '1':  continue     next_step = now[2] + 1     next_path = now[3] + dir_s[i]     q.put((next_x, next_y, next_step, next_path))     vis[next_x][next_y] = 1bfs()

5.纸牌三角形  639

from itertools import *ans=0for i in permutations(range(1,10)):  a=i[0]+i[1]+i[2]+i[3]  b=i[3]+i[4]+i[5]+i[6]  c=i[6]+i[7]+i[8]+i[0]  if a==b==c:    ans+=1print(int(ans/6))

6.取球游戏  278

dp = [0 for i in range(10001)]dp[2] = dp[4] = dp[6] = dp[8] = 1for 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] = 1n = int(input())for i in range(n):    print(dp[int(input())])