zoukankan      html  css  js  c++  java
  • 比特大陆机试“判断是否是理想数”代码分享【面试机试】

    题目描述: 

    编写一个算法来确定一个数字是否是“理想数”。 快乐的数字按照如下方式确定:从一个正整数开始,用其每位数的平方之和取代该数,并重复这个过程,直到最后数字要么收敛等于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("请输入一个数字:
    ");
            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
    ");
            }
            if (num==4)
            {
                printf("False
    ");
            }
        }
        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 循环获取字符串类型数字的每一位来计算平方和。

    #判断理想数字
    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()
  • 相关阅读:
    【机器学习】Softmax 和Logistic Regression回归Sigmod
    【LDA】线性判别式分析
    【MLE】最大似然估计Maximum Likelihood Estimation
    n阶方阵A可逆充分必要条件
    【机器学习】K-Means算法
    【X-Forwarded-For】WEB修改访客IP
    【Ubuntu】ubuntu系统下python3和python2环境自由切换
    【Python】打印object对象
    【linux】dpkg info修复及dpkg: warning: files list file for package
    【php】https请求
  • 原文地址:https://www.cnblogs.com/leime/p/9463140.html
Copyright © 2011-2022 走看看