算法三

来源:互联网 发布:mysql 字段值加一 编辑:程序博客网 时间:2024/06/07 00:13

最后的石头

算法描述

  • 小明和小亮玩游戏
  • 开始时,盒子中有k块石头(k的范围在[m,n]内)
  • 两个孩子轮流拿取石头
  • 最后的石头被谁拿走谁获胜
  • 在每一轮中,选手从数组(turns)中可以选择一个数字
  • 假设总是小明先取,计算小明会赢多少次

参数定义

  • 类名 LastStone
  • 方法 numWins
  • 输入参数 vector <int>,int,int
  • 输出 int
  • 方法声明 int numWins(vector <int> turns, int m, int n)

限制条件

  • turns包含1到50个元素
  • turns中的元素范围在1到100之间
  • turns中的元素严格按照从小到大排列
  • turns的第一个元素为1
  • n的范围是[1,100000]
  • m的范围是[1,n]

例子

  • 输入
    • turns: {1, 3, 4}
    • m: 1
    • n: 5
  • 输出
    • 4

如果盒子中包含1,3或者4块石头,小明先取,可以一次性都拿出来,小明赢;
如果盒子中包含2块石头,小明只能从turns数组中选择1,于是只能取出一块石头,小亮取出剩下的一块,小亮赢;
如果盒子中包含5块石头,小明取出3块石头,盒子中还剩2块,下次小明取的时候既可以赢了;
综上,小明总共可以赢得4次,输出4。

测试实例

  • 实例一

    • 输入
      • turns: {1}
      • m: 1
      • n: 100
    • 输出
      • 50
  • 实例二

    • 输入
      • turns: {1,2,3,4,5,6,7,8,9,10}
      • m: 1
      • n: 10
    • 输出
      • 10
  • 实例三

    • 输入
      • turns: {1, 2, 3}
      • m: 1
      • n: 8
    • 输出
      • 6