Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 编程算法:在比赛中寻找胜利者_Algorithm - Fatal编程技术网

Algorithm 编程算法:在比赛中寻找胜利者

Algorithm 编程算法:在比赛中寻找胜利者,algorithm,Algorithm,我将参加OBI(巴西信息学奥林匹克运动会,英语),我正在尝试过去几年的一些练习。但是我找不到这个练习的解决方案(我翻译了它,所以可能有一些错误): 巧克力竞赛 卡洛斯和保拉刚买了一袋巧克力球。就像他们吃的一样 一切都太快了,他们进行了竞争: 他们会轮流吃,一个接一个(保拉总是开始) 每次,他们只能吃1到M个球,这是宝拉妈妈决定的,所以他们不会噎住 如果一个人在轮到他/她时吃了K个球,那么下一个人就不能吃K个球 谁不能按照上述规则比赛,谁就输 在下面的例子中,M=5和20个球,卡洛斯赢了: W

我将参加OBI(巴西信息学奥林匹克运动会,英语),我正在尝试过去几年的一些练习。但是我找不到这个练习的解决方案(我翻译了它,所以可能有一些错误):

巧克力竞赛

卡洛斯和保拉刚买了一袋巧克力球。就像他们吃的一样 一切都太快了,他们进行了竞争:

  • 他们会轮流吃,一个接一个(保拉总是开始)
  • 每次,他们只能吃1到M个球,这是宝拉妈妈决定的,所以他们不会噎住
  • 如果一个人在轮到他/她时吃了K个球,那么下一个人就不能吃K个球
  • 谁不能按照上述规则比赛,谁就输
在下面的例子中,M=5和20个球,卡洛斯赢了:

Who plays        How many ate        Balls left

                                     20
Paula            5                   15
Carlos           4                   11
Paula            3                   8
Carlos           4                   4
Paula            2                   2
Carlos           1                   1
注意到最后,卡洛斯吃不到两个球就赢了,因为保拉在最后一轮吃了两个球。但是保拉吃不下最后一个球,因为卡洛斯在最后一回合吃了1个球,所以保拉不能上场并输了

他们都很聪明,玩得很好。如果有一系列回合确保他/她独立于其他回合获胜,他/她将播放这些回合

任务:

你的任务是找出谁将赢得比赛,如果双方都发挥最佳

输入:

输入仅包含一个测试组,该测试组应从标准输入(通常是键盘)读取

输入有2个整数N(2≤ N≤ 1000000)和M(2≤ M≤ 1000),N为每圈允许的球数,M为每圈允许的球数

输出:

您的程序应该在标准输出中打印一行,其中包含获胜者的姓名

示例:

Input:          Output:
5 3             Paula
20 5            Carlos
5 6             Paula
我一直试图解决这个问题,但不知道如何解决

这里可以找到C语言的解决方案:但我不理解算法。有人在另一个网站上发布了关于这个问题的问题,但没有人回复

你能给我解释一下算法吗


以下是该程序的预期输出:

我认为这是动态编程中另一个稍加掩饰的练习。游戏的状态由两个量来描述:剩余的球数和上一步吃的球数。当剩余的球数时,假设我们有一个布尔函数FirstPlayerWin(FPW),它有两个参数:左巧克力数(c)和最后一步(l),即上一轮的巧克力数,第一步为0。当且仅当第一个在这种情况下打球的球员保证获胜时,套路返回真

基本情况是FPW(0,l)=对于任何l!=false一,


否则,要计算FPW(c,l),FPW(c,l)是真的,如果对于任何x,你的游戏听起来与游戏非常相似——也许玩一个完美游戏的算法对理解这个游戏也很有用?这可能需要转到“理论CS”领域你试图用什么语言来解决它?当涉及到这些问题时,我不是最聪明的人,但我发现用调试器处理一个简单的案例对理解算法非常有帮助。BRB-我将尝试编写一个解决方案(到那时我猜有人会回答这个问题)萨诺尔德:我会读关于尼姆的书,似乎很有帮助。纳撒尼尔:对不起,如果是错误的论坛;这是我的第一篇文章。罗布:问题并不是真正解决问题。奥运会网站上有一个解决方案(C语言),但我不理解算法。谢谢sarnold,维基百科上的文章真的很有帮助。巧克力比赛与此处显示的游戏相同:。我还没有测试解决方案,但我明天会测试。是的-如果我能在10点赢,除了最后一步是7点,那么7点肯定是唯一赢的一步,所以我不能在10点赢,除了最后一步是5点-很好。