题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2544解题报告:小明有一个老式计算器,这个计算器只能显示n位数,现在小明输入一个数k,并且将这个数k一直做平方运算,当得到的结果大于n位的时候 ,这个计算器会自动取最高的n位,问这样一直进行下去能得到的最大的数是多少?

很显然,屏幕上显示的数会有一个周期,例如,当输入1 6 的时候,屏幕上显示的数依次是 6,3,9,8,6,3,9,8,6.......所以,我们在一个周期里面找最大的就可以了。

  1. // File Name: Uva11549-Calculator-Conundrum.cpp
  2. // Author: sheng
  3. // Created Time: 2013年09月23日 星期一 14时08分59秒
  4. #include<cstdio>
  5. #include<cstring>
  6. #include<map>
  7. #include<iostream>
  8. #include<cmath>
  9. using namespace std;
  10.  
  11. typedef long long INT;
  12.  
  13. INT change(INT k,INT n)
  14. {
  15. k *= k;
  16. INT d = ;
  17. INT x = k;
  18. while(x)
  19. {
  20. x /= ;
  21. d++;
  22. }
  23. if(d <= n)
  24. return k;
  25. x = d - n;
  26. while(x--)
  27. k /= ;
  28. return k;
  29. }
  30.  
  31. int main()
  32. {
  33. INT T,n,k;
  34. scanf("%lld",&T);
  35. while(T--)
  36. {
  37. scanf("%lld %lld",&n,&k);
  38. map<INT,int> map1;
  39. pair<map<INT,int>::iterator,bool> iter;
  40. INT ans = -0x3ffffff;
  41. for(int i = ;;++i)
  42. {
  43. ans = max(ans,k);
  44. iter = map1.insert(pair<INT,int> (k,i));
  45. if(iter.second == )
  46. break;
  47. k = change(k,n); //将k平方,并且取最高的n位。
  48. }
  49. printf("%lld\n",ans);
  50. }
  51. return ;
  52. }

另外再附上一种速度更快的方法,Flyod判圈法,利用这种方法判断周期,在Uva上运行时间几乎只用了上一种方法的一半。很神奇的判圈法,可以去了解一下。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<map>
  4. #include<iostream>
  5. #include<cmath>
  6. using namespace std;
  7.  
  8. typedef long long INT;
  9.  
  10. INT change(INT k,INT n)
  11. {
  12. k *= k;
  13. INT d = ;
  14. INT x = k;
  15. while(x)
  16. {
  17. x /= ;
  18. d++;
  19. }
  20. if(d <= n)
  21. return k;
  22. x = d - n;
  23. while(x--)
  24. k /= ;
  25. return k;
  26. }
  27. //Floyd判圈法
  28.  
  29. int main()
  30. {
  31. int T,n,k;
  32. scanf("%d",&T);
  33. while(T--)
  34. {
  35. scanf("%d%d",&n,&k);
  36. int k1 = k,k2 = k,ans = k;
  37. do
  38. {
  39. k1 = change(k1,n);
  40. k2 = change(k2,n);
  41. ans = max(ans,k2);
  42. k2 = change(k2,n);
  43. ans = max(ans,k2);
  44. }while(k1 != k2); //代码更短,速度更快
  45. printf("%d\n",ans);
  46. }
  47. return ;
  48. }

Uva 11549 - Calculator Conundrum 找规律加map的更多相关文章

  1. Floyd判圈算法 UVA 11549 - Calculator Conundrum

    题意:给定一个数k,每次计算k的平方,然后截取最高的n位,然后不断重复这两个步骤,问这样可以得到的最大的数是多少? Floyd判圈算法:这个算法用在循环问题中,例如这个题目中,在不断重复中,一定有一个 ...

  2. UVA 11549 CALCULATOR CONUNDRUM(Floyd判圈算法)

    CALCULATOR CONUNDRUM   Alice got a hold of an old calculator that can display n digits. She was bore ...

  3. UVA 11549 Calculator Conundrum (Floyd判圈算法)

    题意:有个老式计算器,每次只能记住一个数字的前n位.现在输入一个整数k,然后反复平方,一直做下去,能得到的最大数是多少.例如,n=1,k=6,那么一次显示:6,3,9,1... 思路:这个题一定会出现 ...

  4. HDU 1041 Computer Transformation(找规律加大数乘)

    主要还是找规律,然后大数相乘 #include<stdio.h> #include<string.h> #include<math.h> #include<t ...

  5. UVa 1620 Lazy Susan (找规律)

    题意:给 n 个数,每次可以把4个连续的数字翻转,问你能不能形成1-n的环状排列. 析:找一下奇偶性,写几个数试试,就会找到规律. 代码如下: #include <cstdio> #inc ...

  6. UVa 12627 (递归 计数 找规律) Erratic Expansion

    直接说几个比较明显的规律吧. k个小时以后,红气球的个数为3k. 单独观察一行: 令f(r, k)为k个小时后第r行红气球的个数. 如果r为奇数,f(r, k) = f((r+1)/2, k-1) * ...

  7. UVA 10706 Number Sequence (找规律 + 打表 + 查找)

    Problem B Number Sequence Input: standard input Output: standard output Time Limit: 1 second A singl ...

  8. Paper Folding UVA - 177 模拟+思路+找规律

    题目:题目链接 思路:1到4是很容易写出来的,我们先考虑这四种情况的绘制顺序 1:ru 2:rulu 3:rululdlu 4:rululdluldrdldlu 不难发现,相较于前一行,每一次增加一倍 ...

  9. UVA 11489 - Integer Game(找规律)

    题目链接 #include <cstdio> #include <cstring> #include <string> #include <cmath> ...

随机推荐

  1. apache DBUtils 使用例子demo

    转自:http://blog.csdn.net/earbao/article/details/44901061 apache DBUtils是java编程中的数据库操作实用工具,小巧简单实用, 1.对 ...

  2. es6 javascript对象方法Object.assign()

    es6 javascript对象方法Object.assign() 2016年12月01日 16:42:34 阅读数:38583 1  基本用法 Object.assign方法用于对象的合并,将源对象 ...

  3. Ubuntu下面 PHPSTORM2017.2破解方法

    Ubuntu下面 PHPSTORM2017.2破解方法 下载破解文件 在 http://idea.lanyus.com/上面新下载一个破解文件. 破解步骤 将JetbrainsCrack-2.6.3_ ...

  4. chdir

    <?php //获得当前目录 echo getcwd(); echo "<br />"; //改变为 images 目录 chdir("images&q ...

  5. C# QR二维码DEMO

    QR二维码 二维码的一种 相关类库 ThoughtWorks.QRCode 第三方类库 DEMO功能 Encode 生成二维码图片 Encoding 编码 Correction Level 等级 Ve ...

  6. 你好,OI

    高二了才开通真正意义上的博客...以前一直比较懒没写过什么,现在为了给自己留下一点回忆还是过来了. 上半年的那次失败还是历历在目啊...几个月来一直在我心中挥之不去.虽说也是自己的能力不足造成的,但是 ...

  7. BZOJ2437 [Noi2011]兔兔与蛋蛋 【博弈论 + 二分图匹配】

    题目链接 BZOJ2437 题解 和JSOI2014很像 只不过这题动态删点 如果我们把空位置看做\(X\)的话,就会发现我们走的路径是一个\(OX\)交错的路径 然后将图二分染色,当前点必胜,当且仅 ...

  8. 洛谷 P1199 三国游戏 解题报告

    P1199 三国游戏 题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有\(N\)位武将(\(N\)为 ...

  9. 第一章:CDib类库的建立

    VC++图像处理程序设计(第1版)    杨淑莹 编著     边奠英 主审 第一章 位图基础 Joanna-In-Hdu&Hust 手工打,印象更深刻 使用工具 VS2010 mfc  整本 ...

  10. python调用powershell、远程执行bat

    python调用本地powershell方法 1.现在准备一个简陋的powershell脚本,功能是测试一个IP列表哪些可以ping通: function test_ping($iplist) { f ...