正文

pku2505解题报告2008-09-15 22:12:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bclz/38279.html

分享到:

//      pku2505//    题意:p的初始值为1,两人轮流对p乘以2`9中的一个数,谁先大于等于n谁就赢了//    假设输入的数是N,如果"我方"想赢,则"我方"在赢之前必然达到这样一个数://  N/18<=(M1)<N/9.然而,对方是不会让"我方"达到M1的情况的,所以要求对方给出的//  M2这个数应符合这样的条件:(M2)*2<N/9 &&(M2)*9>=N/18.对方是不会甘心让//  这个数在他手中出现的,所以"我方"给出的(M3)必须让对手无论怎样都能达到M2这样的要求,//  所以满足:(M3)*9<N/(9*2)&& M3)*2>=N/(18*9),//    即N/(18*18)<=(M3)<N/(9*18),在此我们走完了一个来回.//    并且,我们从M1,M3的比较中可以知道:如果"我方"首先给出了一个在N不断除18后的得到不足10的数M,//    "我方"就可以取得胜利,并且双方都很聪明,所以这样胜负就决定于N了。//    结论:如果N不断除18后得到不足18的数M,如果1<M<=9则先手胜利,即stan wins.//  如果9<M<=18则后手胜利.////    上述分析纯属抄袭.受益良多,遂转之.#include <iostream>using namespace std;int main(){    double n;    while(cin>>n)    {        while(n>18)            n/=18;        if(n<=9 && n>=1)            cout<<"Stan wins."<<endl;        else if(n>9 && n<=18)            cout<<"Ollie wins."<<endl;    }    return EXIT_SUCCESS;}

阅读(2323) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册