比特大陆面试“判断是否是理想数”代码分享

题目描述:

编写一个算法来确定一个数字是否是“理想数”。 快乐的数字按照如下方式确定:从一个正整数开始,用其每位数的平方之和取代该数,并重复这个过程,直到最后数字要么收敛等于1且一直等于1,要么将无休止地循环下去且最终不会收敛等于1。能够最终收敛等于1的数就是“理想数”。

例如:19是一个“理想数”,计算过程如下:

  • 1^2+9^2=82
  • 8^2+2^2=68
  • 6^2+8^2=100
  • 1^2+0^2+0^2=1

要求:

当输入理想的数字时,输出True,否则输出False。

思路:

方法一(c语言实现):

1. 不理想的数字最终会在 [4,16,37,58,89,145,42,20] 这些数字中无限循环,因此可以加入判断,当数字变为这些数字里的任意一个(比如4)时就结束循环,输出False,从而避免无限循环的产生。

2. 理想数都会收敛于1。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int car = 1;
    int num = 0;
    int tmp = 0;
    while (car == 1)
    {
        printf("请输入一个数字:\n");
        scanf("%d", &num);
        while ((num!=1)&&(num!=4))
        {
            while (num!=0)
            {
                tmp += (num % 10)*(num % 10);
                num /= 10;
            }
            num = tmp;
            tmp = 0;
        }
        if (num==1)
        {
            printf("True\n");
        }
        if (num==4)
        {
            printf("False\n");
        }
    }
    getchar();
    getchar();
    return 0;
}

方法二(python语言实现):

1. 不理想的数字最终会在 [4,16,37,58,89,145,42,20] 这些数字中无限循环,因此可以加入判断,当数字变为这些数字里的任意一个(比如4)时就结束循环,输出False,从而避免无限循环的产生。

2. 理想数都会收敛于1。

var = 1
while var == 1:                 #制作一个循环,可以反复输入数字来判断是不是“快乐的数”

    a = input()                 #输入一个正整数

    while (a != 1 and a != 4):  #当a不等于1或者4时,一直计算平方和
        num = list(str(a))      #读取输入数字的每位数制成列表
        a = 0                   #初始化a,用于计算每位平方和。此时a值已保存在num里,无需担心丢失。
        for i in num:           #遍历num列表中所有数值,计算出每位数平方和
            a = a + int(i)**2
        print(a)                #打印出当次计算的平方和
    if(a == 1):                 #当a等于1时,判断为“快乐的数字”,打印“True”
        print(‘True‘)
    else:                       #当a不等于1时,打印“False”(其实不是1就是4)
        print(‘False‘)

方法三(python语言实现):

1. 当输入的不是理想数字时,会陷入一个无限循环,因此增加一个计数器 count 用来统计计算次数。设定当 count 达到2000次时,认为该数字不是理想数字,跳出循环结束计算。(可以优化算法解决这一问题)2. 因为不确定输入的数字会是几位数,因此不采用除法和取模的方法来获得数字的每一位数,而是利用 for 循环获取字符串类型数字的每一位来计算平方和。

2. 因为不确定输入的数字会是几位数,因此不采用除法和取模的方法来获得数字的每一位数,而是利用 for 循环获取字符串类型数字的每一位来计算平方和。

#判断理想数字
def getSumofSquares(num):
    numStr=str(num) #将待计算的数字转换成字符串类型
    sum=0
    digitls=[int(x) for x in numStr] #从字符串中提取出每一位数字存入一个列表
    #print(digitls)
    for i in digitls:
        sum += i**2
    return sum

def main():
    n = input() #输入一个正整数
    sumofSqrs = eval(n)
    count = 0
    while sumofSqrs != 1:
        sumofSqrs = getSumofSquares(sumofSqrs)
        count += 1
        if count > 2000: #当计算次数超过2000次时,跳出循环结束计算
            print("False")
            break
    else:
        print("True")

main()

原文地址:https://www.cnblogs.com/leime/p/9463140.html

时间: 2024-10-31 12:46:19

比特大陆面试“判断是否是理想数”代码分享的相关文章

编程算法 - 判断二叉树是不是平衡树 代码(C)

判断二叉树是不平衡树 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一颗二叉树的根结点, 判断该树是不是平衡二叉树. 二叉平衡树: 任意结点的左右子树的深度相差不超过1. 使用后序遍历的方式, 并且保存左右子树的深度, 进行比较. 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <std

jquery实现的判断倒计时是否结束代码

jquery实现的判断倒计时是否结束代码:本章节介绍一段代码实例,此代码能够判断当前日期是否已经倒计时结束,此代码中并没有倒计时效果,只是判断是否倒计时完成,比如购物网站优惠期限等,虽然实际应用中,很少会出现类似的代码,不过希望能够给浏览者带来一定的启示作用.代码如下: function done(){ var str=$('#end').text(); var out=str.match(/\d+/g); console.log(out); var h=parseInt(out[0]),m=p

jquery判断浏览器类型的代码

jquery判断浏览器类型的代码 Jquery中利用navigator.userAgent.indexOf来判断浏览器类型,并进行了一下处理,建议学习Jquery的朋友学习下,了解一下思路. 主要使用的方法:$.browser.['浏览器关键字'] . 代码如下: $(function() { if($.browser.msie) { alert("this is msie"); } else if($.browser.safari) { alert("this is saf

Cobra怼比特大陆滥用算力要求改算法,吴忌寒:比特币或跌到10%下

昨天,Bitcoin.org负责人Cobra发表公开信怒怼比特大陆,要求比特币用户修改PoW算法,采用PoW+PoS混合系统,并且选择那些方便搭建ASICs的算法. 随后,比特大陆CEO吴忌寒在推特回应称"太酷了.当你真的这么做的时候,比特币在加密货币市场的份额大概会跌到10%以下.祝你好运!".Cobra在公开信中表达了以下观点:1.比特币的去中心特性正在被中心化的算力摧毁.2.比特币的去中心化特点不应该被中心化算力所主导.3.随着比特币的发展,硬分叉将变得越来越难.4.算力正在被滥

比特大陆进军以太坊,推ETH专用矿机,吴忌寒“矿霸”名不虚传

日前,比特大陆在推特上宣布推出其专门研发用于以太坊挖矿的加密货币矿机Antminer E3.据悉,每台Antminer E3售价为800美元/台,每位用户限购一台,7月下旬开始发售.目前暂不支持国内销售. 正如比特大陆在官方推特宣传的那样,E3是目前世界上最强劲.最高效的EtHash 矿机,其算力为180 Megahash,是同价位英伟达(Nvidia)产的Geforce 1080算力的6倍. Antminer E3的面世,吹响了吴忌寒正式进军以太坊的号角.何玺认为,Antminer E3对行业

Ajax (Asynchronous javascript xml) 搜索框核心代码(JQuery) Ajax判断用户名存在核心代码 附:原生js的Ajax代码

前端 <script type="text/javascript"> $(function(){ $("#tid").keyup(function(){ //获取当前输入 的值 var value=$(this).val(); //偷偷摸摸发起请求 var url="${pageContext.request.contextPath }/like" var params="name="+value; //先清空下方

EMLOG判断插件是否激活代码

最近在写听歌房EMLOG插件,需要用到判断插件是否激活的功能,在EMLOG官方文档里没看到有这个判断插件是否激活的函数,到底EMLOG判断插件是否激活的函数有没有,蓝叶也不清楚:为了使用这个功能,打开数据库查看了下,发现当插件激活后在数据库options表中的option_name项中active_plugins字段中会写入插件的名称,看到这个就知道有办法可以判断插件是否激活了,于是写个查询active_plugins字段中是否有需要的插件名称的代码,这样就可以判断插件是否激活了,EMLOG判断

消息称詹克团海外已提起法律诉讼 试图夺回比特大陆控制权

腾讯科技讯,据外媒报道,被驱逐的比特大陆联合创始人詹克团提起了法律诉讼,试图夺回自己的权力.这使得争夺这个全球最大加密货币矿商控制权的斗争升级. 这位工程神童出身的企业家拥有的 Great Simplicity 投资公司在 2019 年 12 月提交了一份传票,要求开曼群岛一家法院推翻比特大陆的一项股东决定,该决定让他失去了对这家加密货币矿商的投票权. 在传票中——这是一份送达被告比特大陆的通知——詹克团要求法院宣布比特大陆在 11 月特别股东大会上限制他权利的投票无效. 据悉,比特大陆股东投票

代码分享——svn分支合并(开发分支合并到主干上)

设计逻辑 通过命令行可以传值,动态的合并不同版本库中的代码: 判断是否已经迁出代码到本地,如果没有需要先迁出: 获取主干和分支的版本号,便于今后的合并: 如果主干版本号大于等于分支版本号,则无需合并: 合并后提交主干版本号到主干: 拉取主干更新日志,查看是否已经合并成功: 代码逻辑 #!/bin/sh if [ -n $1 ];then repos_name=$1 repos_url='svn://domain.com/'$repos_name repos_dir='/root/svn_co_c