规则:在黑板上写两个不相等的正整数,两个玩家依次轮流写出黑板上任意两个数字的差,且差不可以和黑板上的任意一个数字相同,求出可以做差的次数。
想法:
1.若相减结果可以负值,则可以一直进行下去
2.若相减结果不可以是负数,则最终结果为两数中的最大值,间隔为两数的最大公约数,即给出数a,数b,最大公约数为c 最终结果为 c: c: max( a , b ) 分析如下:
a = n * c b = m * c 第一次计算为 a - b = ( n - m ) * c ( a > b ) 则等式两边可同时除以c, 而根据设定 两数之差最小为大于等于1的正整数,易证最终结果中理论最小的数为c,又类比辗转相除的减法表示可以求得最大公约数,则证明最终结果为 c: c: max( a , b )
所以在给出数字时计算其最大公约数,结果( max( a , b ) / c ) -2 次若可以考虑相同数字相减为零的话则为( max( a , b ) / c ) -1 次选择 先后顺序
import random
c = []
count = 0
def randomk():
return random.randint(0, 50)
def func( x, y, c):
global count
if (c[x]-c[y]) <= 0:
return
for coord in c:
if coord ==(c[x]-c[y]):
return
c.insert( 0,c[x]-c[y])
count += 1
return 5
def main():
a = randomk()
b = randomk()
x = 0
y = 0
if a != b :
c.insert( 0, a)
c.insert( 1, b)
while x <=(len(c)-1):
while y <=(len(c)-1):
if func( x, y, c)==5:
x = 0
y = 0
y += 1
x += 1
y = 0
print(c)
main()