zoukankan      html  css  js  c++  java
  • 关于数据格式转换及羽毛球比赛输赢概率的面试题

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    #input
    listd = [
     {"id": 1, "level": 0, "parent_id": 0, "name": "PROVINCE_A"},
     {"id": 2, "level": 1, "parent_id": 1, "name": "CITY_B"},
     {"id": 3, "level": 2, "parent_id": 2, "name": "DISTRICT_C"},
     {"id": 4, "level": 3, "parent_id": 3, "name": "VILLAGE_D"},
     {"id": 5, "level": 3, "parent_id": 3, "name": "VILLAGE_E"},
     {"id": 6, "level": 0, "parent_id": 0, "name": "PROVINCE_F"},
     {"id": 7, "level": 1, "parent_id": 6, "name": "CITY_G"},
     {"id": 8, "level": 2, "parent_id": 7, "name": "DISTRICT_H"},
     {"id": 9, "level": 3, "parent_id": 8, "name": "VILLAGE_I"}
    ]
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    # expected return
    {
    "PROVINCE_A": {
    "CITY_B": {
    "DISTRICT_C": ["VILLAGE_D", "VILLAGE_E"]
    }
    },
    "PROVINCE_F": {
    "CITY_G": {
    "DISTRICT_H": ["VILLAGE_I"]
    }
    }
    }
    
    1
    2
    
    def search(ids):
        return next(item for item in listd if item['id'] == ids)
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    '''主要思路是通过构建一个空的dict,然后按照需要转化的格式按逻辑填充'''
    s = dict()
    for i in listd:
        if i['level'] == 1:
             大专栏  关于数据格式转换及羽毛球比赛输赢概率的面试题 - 杰普的博客s[search(i['parent_id'])['name']] = {i['name']:{}}
        if i['level'] == 2:
            s[search(search(i['parent_id'])['parent_id'])['name']][search(i['parent_id'])['name']] = {i['name']:[]}
        if i['level'] == 3:
            s[search(search(search(i['parent_id'])['parent_id'])['parent_id'])['name']][search(search(i['parent_id'])['parent_id'])['name']][search(i['parent_id'])['name']].append(i['name'])    
    print(s)
    
    1
    
    {'PROVINCE_A': {'CITY_B': {'DISTRICT_C': ['VILLAGE_D', 'VILLAGE_E']}}, 'PROVINCE_F': {'CITY_G': {'DISTRICT_H': ['VILLAGE_I']}}}
    

    problem 2

    In a simple badmintom game, one player wins the opponent by: 1. scoring at least 21 points 2. scoring at least 2 points ahead of the opponent

    Now we want to generalize the problem. In each independent round, player A has probalility p to gain one point, and player B has probability (1-p) to gain one point. If a player needs at least N points, and K points ahead of the opponent in order to win the game, can you write a function to ESTIMATE the probability for A to win B? It is guaranteed that 1<=N<=10, 1<=K<=5 and 0<p<1. Only the first three significant figures of your answer are considerd for corretnees.

    由推理可得一局打球次数n的范围:N+K <= n <= 2(N+K)-1
    A获胜的一般公式为:

    1
    
    from scipy.special import comb
    
    1
    2
    3
    4
    5
    6
    7
    
    '''markdown中的指数符号为 ^, python中为 **, 写的时候别混了。
    由于在一定输赢概率下,一局打球的次数是有上限的,超过这个上线必有一方胜出,因此可以通过次数的范围计算每个次数条件下一方赢的概率'''
    def f(N,K,p):   
        s = 1.0
        for i in range(1,N+K):
            s += (1-p)**(i)*comb(N+K-1+i,i)
        return p**(N+K)*s
    
    1
    
    f(2,3,0.5)
    
    1
    
    0.5
    


  • 相关阅读:
    2018北美部分CS项目学费
    APP接口自动化测试JAVA+TestNG(二)之TestNG简介与基础实例
    浅谈MITM攻击之信息窃取(解密315晚会报道的免费WIFI窃取个人信息)
    APP接口自动化测试JAVA+TestNG(一)之框架环境搭建
    Android测试提升效率批处理脚本(二)
    Android APP压力测试(三)之Monkey日志自动分析脚本
    Android系统build.prop文件
    Android APP压力测试(二)之Monkey信息自动收集脚本
    Android APP压力测试(一)之Monkey工具介绍
    Android反编译(三)之重签名
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12041453.html
Copyright © 2011-2022 走看看