zoukankan      html  css  js  c++  java
  • HDU1517 A Multiplication Game (博弈论+思维)


     
    题目链接:传送门
     
    题意:两个人玩游戏,给定一个数n,从1开始,轮流对该数累乘,直到该数大于等于n结束,Stan每次都先手
     
    解题思路:很明显我们可以发现当n为[2,9]的时候,Stan必胜,当n为[10,18]的时候,无论Stan输入了什么,Ollie都能乘以一个[2,9]的数使得当前的数大于等于n,换句话说也就是在n为[10,18]是Ollie的必胜区间,一次类推我们会发现当n为[19,162]的时候,是Stan的必胜区间,当n为[163,324]的时候是Ollie的必胜区间,换句话说也就是说两位的必胜区间都是交替进行的,每18一个周期,我们只需要判断n不断除18后余下的m的值是多少即可判断是谁必胜,当m为[2,9]时,Stan必胜,当m为[10,18]时,Ollie必胜,注意n用double类型,因为在对n不断进行18除的时候此时的n不一定时18的倍数,这样会造成数据的丢失,会对结果造成影响
     
    Code:

    #include<cstdio>
    main(double t)
    {
    	while(~scanf("%lf",&t)) {
    		while(t > 18)t = t/18;
    		t<=9?puts("Stan wins."):puts("Ollie wins.");
    	}
    }
    
  • 相关阅读:
    内置函数(少量)
    画国旗(尺寸不标准)
    测试题——程序
    乱码笔记2--字典
    列表
    课堂笔记 ——————乱
    如何利用pip安装国内镜像源
    pip常用指令
    pip卸载
    pip简介
  • 原文地址:https://www.cnblogs.com/Mangata/p/14342362.html
Copyright © 2011-2022 走看看