作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

题目描述:

自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2 = 625,76^2 = 5776,9376^2 = 87909376。请求出n(包括n)以内的自守数的个数

本题有多组输入数据,请使用while(cin>>)等方式处理

输入描述:

int型整数

输出描述:

n以内自守数的数量。

示例:

输入:

5
2000

输出:

3
8

说明:

对于样例一,有0,1,5,这三个自守数

解题思路:

这题是数字分析题。通过对自然数的平方数分析,来判断该自然数是否为自守数。我采用了字符串的方式进行分析,也可以用数字运算的方式,都行。代码见正常版本。

本文我主要想分享下我的提速方案,代码见提速版本。这道题目因为要多次输入,我想假如第一次输入了一个很大的数,第二次输入的数如果比上个数小,那可以直接从上个数的结果容器中快速获取答案,若比上个数大,那只需要在上个数的基础上继续往后分析即可,不需要再从头分析一遍,那样可太慢了。所以我用maxnum来表征当前已分析过的数字的最大值,每次输入新的数字,只需判断下即可,处理起来非常快。

效果对比见文末。

测试代码:

1)正常版本

#include <iostream>
#include <vector>
#include <string>using namespace std;vector<int> results;bool isAN(int num)
{int square=num*num;string sn=to_string(num);string ss=to_string(square);int k=ss.size()-1;for(int i=sn.size()-1;i>=0;--i){if(sn[i]!=ss[k])return false;k--;}return true;
}
int getAN(int num)
{int sum=0;int k=results[results.size()-1];for(int i=0;i<=num;++i){if(isAN(i)){results.push_back(i);sum++;}}return sum;
}int main()
{int num;while(cin>>num){cout<<getAN(num)<<endl;}return 0;
}

2)提速版本

#include <iostream>
#include <vector>
#include <string>
#include <time.h>
using namespace std;vector<int> results;
int maxnum = -1;
// 自守数Autonomous number
bool isAN(int num)
{int square = num * num;string sn = to_string(num);string ss = to_string(square);int k = ss.size() - 1;for (int i = sn.size() - 1; i >= 0; --i){if (sn[i] != ss[k])return false;k--;}return true;
}int getAN(int num)
{int sum = 0;int k;int size = results.size();if (maxnum < num){sum += size;for (int i = maxnum+1; i <= num; ++i){if (isAN(i)){results.push_back(i);sum++;}}maxnum = num;}else {for (int i = 0; i < size; ++i){if (results[i] <= num)sum++;}}return sum;
}int main()
{int num;while (cin >> num){//clock_t s, e;//s = clock();cout << getAN(num) << endl;//e = clock();//cout << "time:" << e - s << endl;}return 0;
}

提速效果:

输入2000010、2000000、2000100、700四个数,看运行时长。

1)正常版本:

2)提速版本:

是不是提速非常的明显,代码也只稍微变换了逻辑,这就是算法的魅力。

华为机试HJ99:自守数(附带提速方案)相关推荐

  1. 2022/7/26华为机试,Q2,上机迷迷糊糊的,搞完突然醒悟,自抱自泣!三道题附带答案

    21:52 2022/7/26华为机试三道题附带答案 备注:未ac,华为不难,难的是个人很难进入答题状态! 第一道 给定一个字符串,是工作记录的日志时间,时间为四段格式,AA:BB:CC:DDD 其中 ...

  2. 牛客网–华为机试在线训练9:提取不重复的数

    牛客网–华为机试在线训练9:提取不重复的数 题目描述 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数. 输入描述: 输入一个int型整数 输出描述: 按照从右向左的阅读顺 ...

  3. 【华为机试真题详解】数大雁【2022 Q2 | 100分】

    文章目录 前言 详解试题 1419. 数青蛙 华为机试题. 数大雁 题目解析 数青蛙代码实现 数大雁不考虑叫声不完整的情况 数大雁考虑叫声不完整的情况 前言 <华为机试真题详解>专栏含牛客 ...

  4. 【华为机试真题详解】不含 101 的数【2022 Q4 | 100分】

    文章目录 前言 题目描述 输入描述 输出描述 示例 1 示例2 题目解析 参考代码 前言 <华为机试真题详解 Python实现>专栏含牛客网华为专栏.华为面经试题.华为OD机试真题. 如果 ...

  5. Java算法:华为机试算法(下),华为算法Java版,牛客网华为算法73~108题

    接上篇:Java算法:华为机试算法(中),华为算法Java版,牛客网华为算法55~72题   HJ73 计算日期到天数转换 计算日期到天数转换 题目描述 根据输入的日期,计算是这一年的第几天.. 测试 ...

  6. 华为机试108题(C 语言解答)

    Nowcoder题库链接:华为机试 HJ1 字符串最后一个单词的长度(字符串) 输入:hello nowcoder输出:8说明: 最后一个单词为nowcoder,长度为8 示例代码: HJ1.c #i ...

  7. 【强烈推荐收藏】坚持3个月爆肝华为机试108题C++全解(适合新手入门,就业必刷套题)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 金九银十,金三银四.当前正处于校招.社招的火热期,之前就想为正在筹备就业的同学们准备刷题宝 ...

  8. 【To Debug】牛客网--华为机试在线训练3:明明的随机数

    牛客网–华为机试在线训练3:明明的随机数 题目描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字, ...

  9. 【华为机试真题Java】从入门到入职-真题列表导读

    写在前面 本专栏有100+道题(持续更新中),都是往期的HW机试真题,根据过往同学的经验基本都会考到原题.大家有什么不懂的都可以留言. 华为机试有三道题目,第一道和第二道属于简单或中等题,分值为100 ...

最新文章

  1. 关闭所有cloudfoundry应用进程
  2. 从创作工具到虚拟超现实主义,聊一聊VR的艺术王国
  3. 深度剖析:CDN内容分发网络技术原理--转载
  4. atitit。wondows 右键菜单的管理与位置存储
  5. 关于 vim 的 magic 设置
  6. python 多组直方图 画图_python – 使用matplotlib的多个并排直方图?
  7. golang笔记14--go 语言爬虫实战项目介绍
  8. 【虚拟机装黑苹果(第三弹)】macOS安装镜像格式转换(dmg转iso,非UltraISO方法)
  9. Lamp部署于三台主机中
  10. excel表格的函数公式大全
  11. Unity—英雄无敌(前方高能)
  12. 【经典】《Java170道面试笔试题全面含答案》涉及java/数据库/Spring框架/JVM/数据结构算法/设计模式相关
  13. PS和AE结合设计的进度条,有图有视频(秒懂)
  14. QT之TreeView
  15. BIRT 使用说明书
  16. 王半仙儿的日记-0002
  17. 数字油田AI平台建设之视野、策略及切入点(深度好文)
  18. Davinci-国产开源数据可视化工具
  19. XAMPP/PHPnow/phpStudy安装使用对比
  20. 2016 Personal Training #4 Div.2 A B C G H

热门文章

  1. Elasticsearch6.x和Kibana6.x的安装
  2. 新“开门七件事”出炉 快递小哥见证社会巨变
  3. Golang Import使用入门
  4. 抢占计算机与通信设备未来产业制高点 ——《信息产业发展指南》解读
  5. 金笛JDMail邮件系统从源头上为企业铸造防lj邮件墙--4
  6. linux 6.2yum问题
  7. 第3章 系统设计和架构设计【扩胸运动,有容乃大】
  8. 19.多个版本的Netcat概览
  9. RAII(Resource Acquisition Is Initialization:资源获取即初始化)
  10. 【毕业设计】PHP公共课平时成绩查询系统(源代码+论文+答辩PPT)