【每周一坑】田忌赛马

本周的题目取自著名的历史典故:田忌赛马

背景资料如下

田忌经常与齐国众公子赛马,设重金赌注。田忌的上宾孙膑发现他们的马脚力都差不多,马分为上、中、下三等,于是对田忌说:“您只管下大赌注,我能让您取胜。”田忌相信并答应了他,与齐王和各位公子用千金来赌注。比赛即将开始,孙膑说:“现在用您的下等马对付他们的上等马,用您的上等马对付他们的中等马,用您的中等马对付他们的下等马。”已经比了三场比赛,田忌一场败而两场胜,最终赢得齐王的千金赌注。

现在我们将齐王的马抽象为一个列表 [3,6,9],田忌的马抽象为另一个列表 [2,5,8],分别代表各自的下、中、上等马。设计一个函数 race(),将两个列表作为参数传递给 race(),将背景资料的策略抽象为代码使田忌赢得比赛,函数返回每轮对阵情况,结果示例:

def race(qiwang,tianji):
    '''
    >>> race([3,6,9],[2,5,8])
    [(9,2),(6,8),(3,5)]
    '''

附加题:

1、如果你是某公子手下的谋士,已知同级别中己方的马优于田忌的马,事先不知道对方派遣顺序,不过可以根据上一轮对方的派出的马匹制定本轮的选择。为公子制定一种派遣策略,使赢得比赛的几率最大。 提示:田忌的策略可用 random 确定

import random
g = [3,6,9]
t = [2,5,8]
# 田忌的策略
def tianji_s():
    return random.shuffle(t)
# 公子的策略
def gongzi_s():
    '''
    your code here 
    '''
# 至少 1000 次测试
for i in range(1000):
    '''
    your code here
    '''

2、现在将马分为 优、上、中、下、劣 五等,五局三胜制,抽象为列表[2,4,6,8,10][1,3,5,7,9] ,其他条件不变,计算出田忌有多少种赢得比赛的可能。

期待各位同学对于本周题目的代码提交。

提交代码可以使用 paste.ubuntu.com 或 codeshare.io 等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。

往期问题可通过公众号菜单栏“课外辅导”栏目中进入查看。

【乒乓数】 解答

乒乓序列从1开始计数,并且始终向上或向下计数。在元素k处,如果k是7的倍数或包含数字7,方向将切换,定义一个函数 pingpong ,传入一个正整数参数 n ,返回第 n 个乒乓数。

def pingpong(n,k=7):
    '''传入一个正整数参数 n 和特殊数 k,返回第 n 个乒乓数

    n - 第 n 个乒乓数
    k - 给定的特殊数,默认为 7
    '''
    # count 计数,随着循环增加
    # num 为 第 count 个数时的乒乓数
    # status 为增或减状态,在 正负 1 之间切换,默认为 1

    count,num,status = 1,1,1

    # 断言 n,k 为正整数,否则抛出错误
    assert isinstance(n,int) and n > 0 ,'input error'
    assert isinstance(k,int) and k > 0 ,'input error'

    while count < n:
        # 判断切换条件
        if str(k) in str(count) or count % k == 0:
            status *= -1
        # 累加或累减
        num += status
        count += 1
    return num

这道题的关键在于预设一个递增或递减的状态,结合 if 判断下一次运算是加 1 还是减 1 ,很多同学都采取了相同的计算原理,写出了比较简洁的代码,参考:

@皮特尔:https://codeshare.io/5vAV3l @bolin:http://paste.ubuntu.com/24332853/ @LDJ:https://github.com/NyanCat12/CrossinWeekly/blob/master/20170407/pingpong.py @Nicked:https://github.com/nicktimebreak/CrossinWeekly/blob/master/pingpong.py

另外 @徐大龙 同学使用了 generator 的方式计算,也值得参考: https://github.com/PeytonXu/learn-python/blob/master/cases/pingpong/pingpong.py

原文发布于微信公众号 - Crossin的编程教室(crossincode)

原文发表时间:2017-04-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏向治洪

java解决hash算法冲突

看了ConcurrentHashMap的实现, 使用的是拉链法. 虽然我们不希望发生冲突,但实际上发生冲突的可能性仍是存在的。当关键字值域远大于哈希表的长度...

2509
来自专栏逸鹏说道

临时处理小记:把Numpy的narray二进制文件转换成json文件

临时处理一个Numpy的二进制文件,分析知道里面是dict类型,简单小记一下,如果Numpy和Python基础不熟悉可以看我之前写的文章(贴一下Numpy的)

1343
来自专栏racaljk

人工智能搜索策略(上)

   广度优先搜索: 从初始节点S0开始逐层向下扩展,在第n层节点还没有全部搜索完之前,不进入第n+1层节点的搜索。Open表中的节点总是按进入的先后排序,先进...

4564
来自专栏数据结构与算法

洛谷P1731 [NOI1999]生日蛋糕(爆搜)

设从下往上数第i(1<=i<=M)层蛋糕是半径为Ri, 高度为Hi的圆柱。当i<M时,要求 R_i>R_{i+1}Ri​>Ri+1​ 且 H_i>H_{i+1}...

1061
来自专栏落影的专栏

程序员进阶之算法练习(八)附两道搜狐笔试题

前言 前面讲了那么多算法的重要性。口说无凭,这次带上两道搜狐今年的笔试题。 这里先附上两道搜狐题目的大意: 题目一: 《宝石》 有一串宝石首尾相连,用...

4335
来自专栏数据分析

[数据分析工具] Pandas 功能介绍(二)

条件过滤 我们需要看第一季度的数据是怎样的,就需要使用条件过滤 ? 体感的舒适适湿度是40-70,我们试着过滤出体感舒适湿度的数据 ? 最后整合上面两种条件,在...

3766
来自专栏海天一树

NOIP 2011初赛普及组C/C++答案详解

3 C 8G = 8 * 1024 M 8 * 1024 / 2 = 4096张 注意,题目说的是“大约”,不要求精确。

1402
来自专栏owent

POJ PKU Let's Go to the Movies 解题报告

题目链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=3513

872
来自专栏数说工作室

统计师的Python日记【第七天:数据清洗(1)】

本文是【统计师的Python日记】第7天的日记 回顾一下: 第1天学习了Python的基本页面、操作,以及几种主要的容器类型。 第2天学习了python的函数、...

55510
来自专栏企鹅号快讯

数控铣床编程实例 数控铣床操作详解

数控铣床操作详解 实例一 ? 毛坯为70㎜×70㎜×18㎜板材,六面已粗加工过,要求数控铣出如图2-23所示的槽,工件材料为45钢。 根据图样要求、毛坯及前道工...

4267

扫码关注云+社区

领取腾讯云代金券