头条面试题:判断一个数是否是happy number(每一位的平方和最终为1)
朋友面试头条二轮了,一轮的题目请看这一篇:头条面试题:求用户在线峰值和持续时间
这次的面试题目是:判断一个数是否是happy number(每一位的平方和最终为1)
知道题目首先要理解题目。所谓happy number就是一个整数每个位数上的数字的平方相加,一直循环,如果最终能等于1,则就是happy number。
举例:19
第一次:1²=9²=82
第二次:8²+2²=68
第三次:6²+8²=100
第四次:1
这样的数就是happy number。
怎么解决呢?这样的问题可以一直循环运算,发现等于1就是happy number,不等于就不是。我朋友就采取的是这种方法。但这种方法有个问题,如果不是happy number要什么时候停止循环进行判断呢?因为不知道循环是否是重复的,或还是无限不重复的循环。还有就是这种循环极容易溢出,所以最好的方法还是要找出规律。
以下就是我的线下手动运算,目的是找出规律:
从0~19的运算结果来看可以得出以下结论:
1.0不是happy number;
2.所有happy number最终都能等于1;
3.所有不是happy number的数都是无限重复循环,且都从4开始循环。
得出了以上规律就可以开始写程序代码了。
计算平方和的方法:
public static int SumSquares(int number)
{
var dic = new ArrayList();
while (true)
{
dic.Add(number % 10);
if (number / 10 == 0)
{
break;
} number = number / 10;
}
var num = 0;
foreach (var item in dic)
{
num += (int)item * (int)item;
}
return num;
}
判断是否是Happy Number:
public static bool IsHappyNumber(int number)
{
while (true)
{
if (number == 4)
break;
if (number == 1)
return true;
number = GetNumber(number);
}
return false;
}
最后在main方法中调用:
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("请输入一个整数(输入exit退出):");
var writeText = Console.ReadLine();
if (writeText == "exit")
break;
var number = Convert.ToInt32(writeText);
bool isHappyNumber = IsHappyNumber(number);
if (isHappyNumber)
Console.WriteLine("输入的是一个Happy Number!");
else
Console.WriteLine("输入的不是一个Happy Number!");
Console.WriteLine();
}
Console.ReadKey();
}
测试:
成功!!!
项目下载地址:https://gitee.com/jingboweilanGO/happy-number.git
头条面试题:判断一个数是否是happy number(每一位的平方和最终为1)的更多相关文章
- 腾讯面试题 腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中? 这个题目已经有一段时间了,但是腾讯现在还在用来面试.腾讯第一次面 ...
- 2018春招-今日头条笔试题-第一题(python)
题目描述:2018春招-今日头条笔试题5题(后附大佬答案-c++版) 解题思路: 要想得到输入的数字列中存在相隔为k的数,可以将输入的数字加上k,然后判断其在不在输入的数字列中即可. #-*- cod ...
- #6 判断一个数是否为2的n次方
「ALBB面试题」 [题目] 如何判断一个数是否为2的n次方 [题目分析] 看到这种题,相信大家第一反应就是循环除2,这样做肯定是可以得出结果的:但是这种做法无疑大大增加了计算机的运行时间,一个非常大 ...
- 2018春招-今日头条笔试题-第四题(python)
题目描述:2018春招-今日头条笔试题5题(后附大佬答案-c++版) #-*- coding:utf-8 -*- class Magic: ''' a:用于存储数组a b:用于存储数组b num:用于 ...
- [算法]判断一个数是不是2的N次方
如果一个数是2^n,说明这个二进制里面只有一个1.除了1. a = (10000)b a-1 = (01111)b a&(a-1) = 0. 如果一个数不是2^n, 说明它的二进制里含有多一 ...
- 如何判断一个数是否为素数(zt)
怎么判断一个数是否为素数? 笨蛋的作法: bool IsPrime(unsigned n){ if (n<2) { //小于2的数即不是合数也不是素数 throw 0; ...
- pyhton 查找一个数的所有因子 以及 判断一个数是否是质数 两个小脚本
最近看到一个网站, 欧拉计划.挺好玩,都是一些算法题.这是本站:http://projecteuler.net/problems 这个是中文站:http://pe.spiritzhang.com/ 下 ...
- 剑指Offer——完美+今日头条笔试题+知识点总结
剑指Offer--完美+今日头条笔试题+知识点总结 情景回顾 时间:2016.9.28 16:00-18:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:完美世界笔试 ...
- 使用二分查找判断某个数在某个区间中--如何判断某个IP地址所属的地区
一,问题描述 给定100万个区间对,假设这些区间对是互不重叠的,如何判断某个数属于哪个区间? 首先需要对区间的特性进行分析:区间是不是有序的?有序是指:后一个区间的起始位置要大于前一个区间的终点位置. ...
随机推荐
- 如何在Mac OS X中开启VIM语法高亮和显示行号
VIM (Wikipedia图) Vim 是一款相当给力的源自UNIX平台的命令行文本编辑器,不过不给力的是,Mac OS X下并没有诸多Linux发行版上VIM那些牛逼哄哄的神马代码高亮显示啊,自动 ...
- OO第一单元总结-多项式求导
OO第一单元总结-多项式求导 一.第一.第二次作业总结 因为前两次作业设计复杂度差别不大,因而放在这里统一总结. 基于度量分析程序结构: 前两次作业确实存在缺乏可拓展设计的构想,基本还是面向过程的思维 ...
- [刷题] 51 N-Queens
要求 将n个皇后摆放在n*n的棋盘中,使横.竖和两个对角线方向均不会同时出现两个皇后 思路 尝试在一行中摆放,如果摆不下,回到上一行重新摆放,直到所有行都摆下 快速判断不合法情况 竖向:col[i]表 ...
- Debian 9.4 多网卡链路聚合bond配置
Debian 9.4 多网卡链路聚合bond配置 安装ifenslave ifenslave 的作用是网卡的负载均衡 root@debian:~# apt-get install ifenslave ...
- 马哥Linux SysAdmin学习笔记(一)
Linux入门 Linux系统管理: 磁盘管理,文件系统管理 RAID基础原理,LVM2 网络管理:TCP/IP协议,Linux网络属性配置 程序包管理:rpm,yum 进程管理:htop,glanc ...
- 008.Ansible文件管理模块
一 stat模块 检查文件状态使用,模块获取文件的状态等信息,类似与linux中的STAT命令可以用来获取文件的属主.可读/写.文件状态等信息 [root@node1 ansible]# stat ...
- Linux进阶之进程管理
本节内容 1.进程管理 2.ps 3.uptime 4.top 5.ss -tnl------ lsof -i :22 一. 进程管理的概念 程序:二进制文件,静态 /bin/date,/usr/sb ...
- Redis 内存大小限制+键值淘汰策略配置
限制最大内存 windows 的 maxmemory-policy 策略可能会少一些 # 指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先尝试 ...
- python操作kafka
python操作kafka 一.什么是kafka kafka特性: (1) 通过磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能. (2) 高吞吐量 :即使是 ...
- CVPR2019:无人驾驶3D目标检测论文点评
CVPR2019:无人驾驶3D目标检测论文点评 重读CVPR2019的文章,现在对以下文章进行点评. Stereo R-CNN based 3D Object Detection for Autono ...