题目链接: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的更多相关文章

  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. Sql Server中判断表、列不存在则创建的方法[转]

    一.Sql Server中如何判断表中某列是否存在 首先跟大家分享Sql Server中判断表中某列是否存在的两个方法,方法示例如下: 比如说要判断表A中的字段C是否存在两个方法: 第一种方法  ? ...

  2. jmeter body 中文显示为乱码解决

    这种情况在jmeter3.0的版本中才会产生,注意:这不是乱码,而是由于3.0中优化body data后,使用默认的字体(Consolas)不支持汉字的显示.这样的情况可以这样调整:进入jmeter. ...

  3. UDJC用户自定义Java类

    private RowSet t1 = null;//业务表步骤 private RowSet t2 = null;//删除步骤 public boolean processRow(StepMetaI ...

  4. [转帖]InfiniBand 主流厂商 和 产品分析

    InfiniBand 主流厂商 和 产品分析   Mellanox成立于1999年,总部设在美国加州和以色列,Mellanox公司是服务器和存储端到端连接InfiniBand解决方案的领先供应商.20 ...

  5. robotium学习及整理

    一.                      Robotium 简介 Robotium是一款国外的Android自动化测试框架,主要针对Android平台的应用进行黑盒自动化测试,它提供了模拟各种手 ...

  6. 【Nginx笔记】 fastcgi_param解释

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#脚本文件请求的路径 fastcgi_param QUERY_STRI ...

  7. MachineLearning Exercise 4 :Neural Networks Learning

    nnCostFunction 消耗公式: a1 = [ones(m,) X]; z2 = a1*Theta1'; pre = sigmoid(a1*Theta1'); a2 = [ones(m,) p ...

  8. 在HL引擎中制作自定义高清贴花

    你是不是想过要做自定义的子弹孔.喷漆或者一些自定义的痕迹呢? 如果按照HL引擎的基本FA,首先要在decals.wad里加入我们自定义的纹理,然后利用gEngfuncs.pEfxAPI->R_D ...

  9. MyFlash闪回恢复数据

    使用限制: .binlog格式必须为row,且binlog_row_image=full. .仅支持5.6与5.. .只能回滚DML(增.删.改). .mysqlbinlog版本请保持一致. 1.安装 ...

  10. Long Long Message POJ - 2774(最长公共子串)

    题意: 给你两串字符,要你找出在这两串字符中都出现过的最长子串 解析: 先用个分隔符将两个字符串连接起来,再用后缀数组求出height数组的值,找出一个height值最大并且i与i-1的sa值分别在两 ...