现在的位置: 首页 > 综合 > 正文

poj2348

2018年04月26日 ⁄ 综合 ⁄ 共 463字 ⁄ 字号 评论关闭
  给两堆石子(题目中是数,配合一下上文这里说石子),两人依次取石子,规则是:
每次从石子数较多的那堆取(两堆石子数目相等时任选一堆),取的数目只能为石子少的
那一堆的正整数倍。最后取完一堆石子者胜。问给定情况下先手胜负情况。
    确实很像欧几里得,一看就想到递归了,似乎递归也不会太难,但是多列几项就会发
现一个熟悉的身影:斐波拉契数列。最后的结论是如果两个数相等,或者两数之比大于斐
波拉契数列相邻两项之比的极限((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.
【上篇】
【下篇】

抱歉!评论已关闭.