题意:

       有一个计算机只能保留数字的前n位,你有一个数字k(k<=9),反复平方后在计算机上显示的最大数字是多少。

思路:

      显然这个题目是有循环节的,为什么有循环节?首先我们看下k<=9那么也就是说所有的答案都是9位数之内的,也就是说才几亿呗,最慢几亿次之后必然循环啊,这样我们就可以不停得枚举,然后碰到循环节的时候就不枚举了,怎么样找循环节,一开始想的是只记录第一个,然后等第一个再次出现的时候就直接break结果果断错了,他有可能是类似这样的循环节1 2 3 4 5 4 5 4 5.....循环节是4 5,这种的,所以第一种方法失败了,但是我们可以用最笨的方法去记录,就是开一个容器,我开的是map,记录每个数字是否出现过,提交之后虽然ac了但感觉容器挺耗时的,然后又写了个书上说的那个Floyd判圈,结果果然快了很多,一下是两种方法的代码。

Floyd判圈

#include<stdio.h>

int mk[15];

void inint()

{

     mk[0] = 1;

     for(int i = 1 ;i <= 9 ;i ++)

     mk[i] = mk[i-1] * 10;

}

long long next(int n ,int a)

{

    long long now = (long long)a * (long long)a;

    while(now >= mk[n])

    now /= 10;

    return int(now);

}

int main ()

{

   int t ,n ,m ,Ans;

   inint();

   scanf("%d" ,&t);

   while(t--)

   {

       scanf("%d %d" ,&n ,&m);

       Ans = m;

       int k1 = m ,k2 = m;

       do

       {

           k1 = next(n ,k1);if(Ans < k1) Ans = k1;

           k2 = next(n ,k2);if(Ans < k2) Ans = k2;

           k2 = next(n ,k2);if(Ans < k2) Ans = k2;

       }while(k1 != k2);

       printf("%d\n" ,Ans);

   }

   return 0;

}

map判断是否出现过

#include<stdio.h>

#include<map>

using namespace std;

int mk[15];

map<int ,int>mark;

void inint()

{

     mk[0] = 1;

     for(int i = 1 ;i <= 9 ;i ++)

     mk[i] = mk[i-1] * 10;

}

long long next(int n ,int a)

{

    long long now = (long long)a * (long long)a;

    while(now >= mk[n])

    now /= 10;

    return int(now);

}

int main ()

{

   int t ,n ,m ,Ans;

   inint();

   scanf("%d" ,&t);

   while(t--)

   {

       scanf("%d %d" ,&n ,&m);

       Ans = m;

       mark.clear();

       mark[m] = 1;

       while(1)

       {

          m = next(n ,m);

          if(Ans < m) Ans = m;

          if(mark[m]) break;

          mark[m] = 1;

       }

       printf("%d\n" ,Ans);

   }

   return 0;

}

            

            

UVA11549计算器谜题的更多相关文章

  1. UVa11549计算器谜题[floyd判圈]

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

  2. UVa 11549 计算器谜题(Floyd判圈算法)

    https://vjudge.net/problem/UVA-11549 题意: 有一个老式计算器,只能显示n位数字,输入一个整数k,然后反复平方,如果溢出的话,计算器会显示结果的最高n位.如果一直这 ...

  3. UVA11549 计算机谜题(Floyd判圈算法)

    #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #inclu ...

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

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

  5. 1.C#WinForm基础制作简单计算器

    利用c#语言编写简单计算器: 核心知识点: MessageBox.Show(Convert.ToString(comboBox1.SelectedIndex));//下拉序号 MessageBox.S ...

  6. 自己动手写计算器v1.1

    这个改动主要是使用工厂模式替代了简单工厂模式,这样做的好处是如果以后我们要扩充其他运算时,就不用总是去修改工厂类, 这是可以采取工厂模式,主要是将原来简单工厂类的逻辑判断分离出来,将它作为一个借口,与 ...

  7. 自己动手写计算器v1.0

    今天突发奇想,想着看了还几个设计模式了,倒不如写点东西来实践它们.发现计算器这种就比较合适,打算随着设计模式的学习,会对计算器不断的做改进. 包括功能的增加和算法的改进.初学者难免犯错,希望大家不吝指 ...

  8. 【IOS开发笔记03-视图相关】简单计算器的实现

    UIView 经过前几天的快速学习,我们初步了解的IOS开发的一些知识,中间因为拉的太急,忽略了很多基础知识点,这些知识点单独拿出来学习太过枯燥,我们在今后的项目中再逐步补齐,今天我们来学习APP视图 ...

  9. [LeetCode] Basic Calculator 基本计算器

    Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...

随机推荐

  1. vs2019远程调试

    VS2019远程调试 这几天遇到个很是纠结的问题,同样的源代码,放在测试服务器,完美运行.但是上线正式环境就是死活显示不出来.于是想到了微软的远程调试功能,这里用VS2019举例. 下载远程访问工具 ...

  2. Linux速通05 文件处理与编辑

    使用 cat 命令进行文件的纵向合并 # 例:使用 cat 命令将 baby.age.baby.weight.baby.sex 这三个文件纵向合并为 baby文件 * cat baby.age bab ...

  3. 关于PHP的表单提交显示

      实现功能:html页面,向表单内填入账号.密码:php页面,将填写的账号与密码信息展示出来. demo6.html代码如下: 1 <!DOCTYPE html> 2 <html& ...

  4. FreeBSD WIFI 配置详细介绍

    首先运行ifconfig,看看能不能找到你的网卡,如果能,那么你可以走了﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉运行sysctl net.wlan.devices,他可以告诉你,找到的无线网卡编辑/b ...

  5. 基础篇:java.security框架之签名、加密、摘要及证书

    前言 和前端进行数据交互时或者和第三方商家对接时,需要对隐私数据进行加密.单向加密,对称加密,非对称加密,其对应的算法也各式各样.java提供了统一的框架来规范(java.security)安全加密这 ...

  6. Cookie与Session的安全性

    说到cookie与session我们首先要说一下为什么要引入这两个东西,这两个多西到底是干什么的 起源 由于HTTP协议使无状态的: 每一次请求都是新的请求,不会记得之前通信的状态 客户端与服务端的一 ...

  7. python-递归函数和内置函数笔记汇总

    1. def syz(*args)    #    *args  参数组 不必填,不限制参数的个数    参数组不常用 2.def sys2(**kwargs): #关键字参数 3.递归函数,  不常 ...

  8. Unknown host 'd29vzk4ow07wi7.cloudfront.net'. You may need to adjust the proxy settings in Gradle.

    修改项目下build.gradle文件 在jcenter()前添加mavenCentral() 1 // Top-level build file where you can add configur ...

  9. C语言数组寻址

    C语言数组 数组的定义 数组是用来存放数据类型相同且逻辑意义相同的数据 数组的大小 数组的大小不能是变量,必须是常量或者常量表达式,常量表达式由编译器编译时自动求值. 也可以不指定数组大小,但必须对数 ...

  10. 实践解析丨Rust 内置 trait:PartialEq 和 Eq

    摘要:Rust 在很多地方使用了 traits, 从非常浅显的操作符重载, 到 Send, Sync 这种非常微妙的特性. Rust 在很多地方使用了 traits, 从非常浅显的操作符重载, 到 S ...