https://vjudge.net/problem/UVA-11549

题意:

有一个老式计算器,只能显示n位数字,输入一个整数k,然后反复平方,如果溢出的话,计算器会显示结果的最高n位。如果一直这样做下去,能得到的最大数是多少?

思路:

这个肯定是会循环的。

比较普通的做法就是用set来判断是否出现过来终止循环。

另一个高效算法:Floyd判圈算法!!

想象一下,假设有两个小孩子在一个“可以无限向前跑”的跑道上赛跑,同时出发,但其中一个孩子的速度是另一个两倍。如果跑到是直的,跑得快的小孩永远在前面,但如果跑道有环,则跑得快的小孩将“追上”跑得慢的小孩。

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
using namespace std; int n,k; int next(int n,int k)
{
int buf[];
if(!k) return ;
int cnt=;
long long k2=(long long)k*k;
while(k2) {buf[cnt++]=k2%;k2/=;}
if(n>cnt) n=cnt;
int ans=;
for(int i=;i<n;i++)
ans=ans*+buf[--cnt];
return ans;
} int main()
{
//freopen("D:\\input.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&k);
int ans=k;
int k1=k,k2=k;
do
{
k1=next(n,k1); ans=max(ans,k1);
k2=next(n,k2); ans=max(ans,k2); //小孩2,第一步
k2=next(n,k2); ans=max(ans,k2); //小孩2,第二步
}while(k1!=k2); //追上以后才停止
printf("%d\n",ans);
}
return ;
}

最新文章

  1. 微软How old do I Look——初体验
  2. Linux vim(4)
  3. SQL存储过程、视图
  4. windows 系统下 Firefox hostadmin插件无法修改Host
  5. Extjs4 获取到前一天的日期
  6. jquery获取当前时间
  7. wp8.1 C#技巧: 计时器
  8. 【linux】rpm常见命令
  9. 非常详细的 Docker 学习笔记
  10. SQL 把查出来的信息整合为一张表
  11. 重拾C,一天一点点_4_随想
  12. hdu 4720 计算几何简单题
  13. WPF 自定义路由事件
  14. 接口中的成员变量必须是static
  15. iOS-网络编程(二)文件上传和断点离线下载
  16. Oracle错误ORA-03113: end-of-file on communication channel处理办法
  17. iOS开发 - Swift使用GCD实现计时器功能
  18. WAF开放规则定义权:专家策略+用户自定义策略=Web安全
  19. 【Java并发.5】基础构建模块
  20. 面向对象【林老师版】:__init__定制自己独有的特征(三)

热门文章

  1. 剑指Offer——翻转单词顺序列
  2. NFS服务基础
  3. Python自省(反射)指南(转)
  4. 详解MySQL第二篇—DML语句
  5. PAT 1038 Recover the Smallest Number[dp][难]
  6. 读写INI配置文件。
  7. springBoot 整合 RabbitMQ 的坑
  8. 设计模式学习(二):面向对象设计原则与UML类图
  9. Java设计原则—依赖倒置原则(转)
  10. vue指令与组件