Uva 11549 - Calculator Conundrum 找规律加map
题目链接: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.......所以,我们在一个周期里面找最大的就可以了。
// File Name: Uva11549-Calculator-Conundrum.cpp
// Author: sheng
// Created Time: 2013年09月23日 星期一 14时08分59秒
#include<cstdio>
#include<cstring>
#include<map>
#include<iostream>
#include<cmath>
using namespace std; typedef long long INT; INT change(INT k,INT n)
{
k *= k;
INT d = ;
INT x = k;
while(x)
{
x /= ;
d++;
}
if(d <= n)
return k;
x = d - n;
while(x--)
k /= ;
return k;
} int main()
{
INT T,n,k;
scanf("%lld",&T);
while(T--)
{
scanf("%lld %lld",&n,&k);
map<INT,int> map1;
pair<map<INT,int>::iterator,bool> iter;
INT ans = -0x3ffffff;
for(int i = ;;++i)
{
ans = max(ans,k);
iter = map1.insert(pair<INT,int> (k,i));
if(iter.second == )
break;
k = change(k,n); //将k平方,并且取最高的n位。
}
printf("%lld\n",ans);
}
return ;
}
另外再附上一种速度更快的方法,Flyod判圈法,利用这种方法判断周期,在Uva上运行时间几乎只用了上一种方法的一半。很神奇的判圈法,可以去了解一下。
#include<cstdio>
#include<cstring>
#include<map>
#include<iostream>
#include<cmath>
using namespace std; typedef long long INT; INT change(INT k,INT n)
{
k *= k;
INT d = ;
INT x = k;
while(x)
{
x /= ;
d++;
}
if(d <= n)
return k;
x = d - n;
while(x--)
k /= ;
return k;
}
//Floyd判圈法 int main()
{
int T,n,k;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&k);
int k1 = k,k2 = k,ans = k;
do
{
k1 = change(k1,n);
k2 = change(k2,n);
ans = max(ans,k2);
k2 = change(k2,n);
ans = max(ans,k2);
}while(k1 != k2); //代码更短,速度更快
printf("%d\n",ans);
}
return ;
}
Uva 11549 - Calculator Conundrum 找规律加map的更多相关文章
- Floyd判圈算法 UVA 11549 - Calculator Conundrum
题意:给定一个数k,每次计算k的平方,然后截取最高的n位,然后不断重复这两个步骤,问这样可以得到的最大的数是多少? Floyd判圈算法:这个算法用在循环问题中,例如这个题目中,在不断重复中,一定有一个 ...
- UVA 11549 CALCULATOR CONUNDRUM(Floyd判圈算法)
CALCULATOR CONUNDRUM Alice got a hold of an old calculator that can display n digits. She was bore ...
- UVA 11549 Calculator Conundrum (Floyd判圈算法)
题意:有个老式计算器,每次只能记住一个数字的前n位.现在输入一个整数k,然后反复平方,一直做下去,能得到的最大数是多少.例如,n=1,k=6,那么一次显示:6,3,9,1... 思路:这个题一定会出现 ...
- HDU 1041 Computer Transformation(找规律加大数乘)
主要还是找规律,然后大数相乘 #include<stdio.h> #include<string.h> #include<math.h> #include<t ...
- UVa 1620 Lazy Susan (找规律)
题意:给 n 个数,每次可以把4个连续的数字翻转,问你能不能形成1-n的环状排列. 析:找一下奇偶性,写几个数试试,就会找到规律. 代码如下: #include <cstdio> #inc ...
- UVa 12627 (递归 计数 找规律) Erratic Expansion
直接说几个比较明显的规律吧. k个小时以后,红气球的个数为3k. 单独观察一行: 令f(r, k)为k个小时后第r行红气球的个数. 如果r为奇数,f(r, k) = f((r+1)/2, k-1) * ...
- UVA 10706 Number Sequence (找规律 + 打表 + 查找)
Problem B Number Sequence Input: standard input Output: standard output Time Limit: 1 second A singl ...
- Paper Folding UVA - 177 模拟+思路+找规律
题目:题目链接 思路:1到4是很容易写出来的,我们先考虑这四种情况的绘制顺序 1:ru 2:rulu 3:rululdlu 4:rululdluldrdldlu 不难发现,相较于前一行,每一次增加一倍 ...
- UVA 11489 - Integer Game(找规律)
题目链接 #include <cstdio> #include <cstring> #include <string> #include <cmath> ...
随机推荐
- shutdown&&isTerminated
shutdownvoid shutdown()启动一次顺序关闭,执行以前提交的任务,但不接受新任务.若已经关闭,则调用没有其他作用.抛出:SecurityException - 如果安全管理器存在并且 ...
- 解决vsftp无法上传文件及文件夹的问题
因为搞hadoop的缘故,考虑到启动linux桌面会给电脑带来比较卡..所以就将图形界面的启动给关闭,完全在命令的模式下使用linux. 使用yum搭建了ftp服务..yum的使用参考:http:// ...
- Linux adduser
- Android 目录结构
Android目录结构中,values目录下对应的是应用程序所需要的数据,网上看到了一个包含values-v11等values-*的写法. 是为了进行分辨率的自适应????????? 因为还没有涉及到 ...
- vue 组件 模板input双向数据数据
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>T ...
- 【刷题】BZOJ 1977 [BeiJing2010组队]次小生成树 Tree
Description 小 C 最近学了很多最小生成树的算法,Prim 算法.Kurskal 算法.消圈算法等等. 正当小 C 洋洋得意之时,小 P 又来泼小 C 冷水了.小 P 说,让小 C 求出一 ...
- 51nod 1678 lyk与gcd | 容斥原理
51nod 200题辣ψ(`∇´)ψ !庆祝! 51nod 1678 lyk与gcd | 容斥原理 题面 这天,lyk又和gcd杠上了. 它拥有一个n个数的数列,它想实现两种操作. 1:将 ai 改为 ...
- Android App Architecture使用详解
Android应用架构简介 对于经过过构建app的Android开发人员来说, 现在是时候了解一下构建鲁棒, 质量高的应用的最佳实践和推荐架构了. 这篇文章假设读者对Android framework ...
- 洛谷 P4279 [SHOI2008]小约翰的游戏 解题报告
P4279 [SHOI2008]小约翰的游戏 题目描述 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有\(n\)堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子 ...
- kafka 多线程消费
一. 1.Kafka的消费并行度依赖Topic配置的分区数,如分区数为10,那么最多10台机器来并行消费(每台机器只能开启一个线程),或者一台机器消费(10个线程并行消费).即消费并行度和分区数一致. ...