最后的石头
算法描述
- 小明和小亮玩游戏
- 开始时,盒子中有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
- 输入