给两堆石子(题目中是数,配合一下上文这里说石子),两人依次取石子,规则是:
每次从石子数较多的那堆取(两堆石子数目相等时任选一堆),取的数目只能为石子少的
那一堆的正整数倍。最后取完一堆石子者胜。问给定情况下先手胜负情况。
确实很像欧几里得,一看就想到递归了,似乎递归也不会太难,但是多列几项就会发
现一个熟悉的身影:斐波拉契数列。最后的结论是如果两个数相等,或者两数之比大于斐
波拉契数列相邻两项之比的极限((sqrt(5)+1)/2),则先手胜,否则后手胜。
当然这道题也能用欧几里得来做,不过相比这个就麻烦不少
program poj2348; var a,b:int64; begin repeat read(a,b); if (a=0)and(b=0) then break; if a>b then begin b:=a xor b; a:=a xor b; b:=a xor b; end; if (a=b)or(b/a>=(sqrt(5)+1)/2) then writeln('Stan wins') else writeln('Ollie wins'); until false; end.