将任何一个数字减为0的最佳方法

时间:2019-05-04 06:19:38

标签: algorithm math

给出两个数字nm,即只允许一个操作

我们只能减去较小数字的倍数,并且不能为零,即每转至少要减去1。

如何找到将任意一个数字减少为0的最佳路径?

我尝试使用以下规则:

  • 如果gcd(m, n) == min(m, n),则转1圈
  • 如果(n % (m % n) == 0 and n + (m % n) < m)然后2圈
if(__gcd(a, b) == min(a, b) || __gcd(a, b) == 1 || (n % (m % n) == 0 && n + (m % n) < m))
   cout << "Win";
else
   cout << "Lose";

预期结果显示,如果有人从头开始并且有2名玩家在玩,则考虑到每个玩家的最佳玩法,则第一个玩家是赢还是输。

例如

1 1
Win
4 4
Win
4 6
Lose

1 个答案:

答案 0 :(得分:0)

根据您的问题陈述,只有两种情况:

  1. 如果人数较少,他将以第一步出局。
  2. 如果有大量开始游戏,则 如果gcd(m,n)== min(m,n)
    然后更大的赢在第一步 其他 在第二步中,小将获胜