坏巧克力 两个玩家轮流掰一块m*n的巧克力,其中一块1*1的小块是坏的。每次掰只能顺着方格的边界,沿直线一掰到底。每掰一次,掰的人把两块中不含坏巧克力的那块吃掉,谁碰到最后那块坏巧克力就算输了。

本文主要是介绍坏巧克力 两个玩家轮流掰一块m*n的巧克力,其中一块1*1的小块是坏的。每次掰只能顺着方格的边界,沿直线一掰到底。每掰一次,掰的人把两块中不含坏巧克力的那块吃掉,谁碰到最后那块坏巧克力就算输了。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

坏巧克力问题:

      两个玩家轮流掰一块m*n的巧克力,其中一块1*1的小块是坏的。每次掰只能顺着方格的边界,沿直线一掰到底。每掰一次,掰的人把两块中不含坏巧克力的那块吃掉,谁碰到最后那块坏巧克力就算输了。在这个游戏中,先走好还是后走好?

     写一个互动程序,让大家可以和计算机玩这个游戏。这个程序在胜局应该走出致胜一步,在败局中则只要随机下出合规的一步就好。

import numpy as np
#定义一个m*n矩阵,初始化时,默认其值均为1。随机选择一个位置另其为0,代表坏巧克力。
# 生成巧克力
def Create_Choclate():print('输入巧克力的大小m*n')m = int(input('输入 m:'))n = int(input('输入n:'))Sum = m*n #巧克力块总数chocolate = np.ones(Sum).reshape(m, n)return chocolate, m, n#随机一个位置 置为0,生成坏巧克力
def Create_Bad(chocolate,m,n):x = np.random.randint(0, m)y = np.random.randint(0, n)chocolate[x][y] = 0print('生成的坏巧克力')print(chocolate)return chocolate,x,y #返回坏的巧克力,和坏巧克力的下标#掰巧克力操作,默认吃掉不含坏巧克力的一半
def Split(Chocolate_Bad, x, y ,m ,n): #xy mn分别为坏巧克力的横纵坐标,巧克力的当前大小m*nprint('沿着一个方向水平或者垂直(x或者y)及下标a~b中间掰开(下标从0开始)')aix = input('选择掰开的方向为:')indexa = int(input('a='))indexb = int(input('b='))if(aix =='x'): #沿着水平方向掰开if(indexb>x):#当掰开的位置在坏的下边Chocolate_Bad = Chocolate_Bad[0:indexb, :]x=xy=ym=indexbn=nelif(indexb<x or indexb == x):#当掰开的位置在坏的上边Chocolate_Bad = Chocolate_Bad[indexb:m, :]x=x-indexby=ym=m-indexbn=nelse:print('输入错误')elif(aix == 'y'):#沿着竖直掰if (indexb > y):#当掰开的位置在坏的右边Chocolate_Bad = Chocolate_Bad[:, 0:indexb]x=xy=ym=mn=indexbelif (indexb < y or indexb == y):#当掰开的位置在坏的左边Chocolate_Bad = Chocolate_Bad[:, indexb:n]x=xy=y-indexbm=mn=n-indexbelse:print('输入错误')return Chocolate_Bad,x,y,m,ndef main():Chocolate_good,m,n = Create_Choclate()Chocolate_Bad, x, y = Create_Bad(Chocolate_good, m, n)print('坏巧克力下标(%d,%d) '%(x,y))while(m>1 or n>1):Chocolate_Bad,x,y,m,n = Split(Chocolate_Bad, x, y, m, n)print('吃掉一块后为')print(Chocolate_Bad)print('当前坏巧克力的坐标为(%d,%d),巧克力的大小为(%d,%d)'%(x, y, m, n))if((m==1 and n==2) or (m==2 and n==1)):print('你赢了')print('游戏结束,你输了')if __name__ == "__main__":main()

这篇关于坏巧克力 两个玩家轮流掰一块m*n的巧克力,其中一块1*1的小块是坏的。每次掰只能顺着方格的边界,沿直线一掰到底。每掰一次,掰的人把两块中不含坏巧克力的那块吃掉,谁碰到最后那块坏巧克力就算输了。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/815494

相关文章

POJ1269 判断2条直线的位置关系

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线:  p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0  来判断,  判断 平行:  p1p

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

(function() {})();只执行一次

测试例子: var xx = (function() {     (function() { alert(9) })(); alert(10)     return "yyyy";  })(); 调用: alert(xx); 在调用的时候,你会发现只弹出"yyyy"信息,并不见弹出"10"的信息!这也就是说,这个匿名函数只在立即调用的时候执行一次,这时它已经赋予了给xx变量,也就是只是

2024年AMC10美国数学竞赛倒计时两个月:吃透1250道真题和知识点(持续)

根据通知,2024年AMC10美国数学竞赛的报名还有两周,正式比赛还有两个月就要开始了。计划参赛的孩子们要记好时间,认真备考,最后冲刺再提高成绩。 那么如何备考2024年AMC10美国数学竞赛呢?做真题,吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,可以通过真题查漏补缺,更有针对性的补齐知识的短板。

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位 一、背景二、定位问题三、解决方法 一、背景 flume系列之:定位flume没有关闭某个时间点生成的tmp文件的原因,并制定解决方案在博主上面这篇文章的基础上,在机器内存、cpu资源、flume agent资源都足够的情况下,flume agent又出现了tmp文件无法关闭的情况 二、

【H2O2|全栈】Markdown | Md 笔记到底如何使用?【前端 · HTML前置知识】

Markdown的一些杂谈 目录 Markdown的一些杂谈 前言 准备工作 认识.Md文件 为什么使用Md? 怎么使用Md? ​编辑 怎么看别人给我的Md文件? Md文件命令 切换模式 粗体、倾斜、下划线、删除线和荧光标记 分级标题 水平线 引用 无序和有序列表 ​编辑 任务清单 插入链接和图片 内嵌代码和代码块 表格 公式 其他 源代码 预

求空间直线与平面的交点

若直线不与平面平行,将存在交点。如下图所示,已知直线L过点m(m1,m2,m3),且方向向量为VL(v1,v2,v3),平面P过点n(n1,n2,n3),且法线方向向量为VP(vp1,vp2,vp3),求得直线与平面的交点O的坐标(x,y,z): 将直线方程写成参数方程形式,即有: x = m1+ v1 * t y = m2+ v2 * t

jmeter之仅一次控制器

仅一次控制器作用: 不管线程组设置多少次循环,它下面的组件都只会执行一次 Tips:很多情况下需要登录才能访问其他接口,比如:商品列表、添加商品到购物车、购物车列表等,在多场景下,登录只需要1次,我们期望的是重复执行登陆后面的接口来做压测,这就和事务相关,例如 事务1: 登录—>添加购物车 事务2: 登录—>购物车列表 事务3: 登录—>商品列表—>添加购物车 … 一、仅一次控制器案例 在

两个长数字相加

1.编程题目 题目:要实现两个百位长的数字直接相加 分析:因为数字太长所以无法直接相加,所以采用按位相加,然后组装的方式。(注意进位) 2.编程实现 package com.sino.daily.code_2019_6_29;import org.apache.commons.lang3.StringUtils;/*** create by 2019-06-29 19:03** @autho