weixin_49554282 2021-06-04 09:02 采纳率: 0%
浏览 45

求问一道python题目

归一数定义为:1)对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和;2)然后重复这个过程直到这个数变为1,也可能是无限循环但始终变不到1(很容易证明这个无限循环中所有的数都不会超过1000);3)如果可以变为1,那么这个数就是归一数。

例如,对于正整数19,有12 + 92 = 82,82 + 22 = 68,62 + 82 = 100,12 + 02 + 02 = 1,所以它是归一数。

100以内的归一数包括1, 7, 10, 13, 19, 23, 28, 31, 32, 44, 49, 68, 70, 79, 82, 86, 91, 94, 97, 100。所以第4个归一数是13。

编写程序,读入文本文件input.txt,对每一行进行处理,并将处理结果输出到文本文件output.txt中:1)如果是以问号开头,问号后面的数字是归一数,就输出“Yes”,否则输出“No”;2)如果不是以问号开头,就输出序号是该正整数(假定这个正整数小于10000) 的归一数。

class Solution(object):
    def 归一数(self, n):
        """
        :type n: int
        :rtype: bool
        """
        setTemp = []
        while True:
            sums = 0
            while n // 10:
                sums += (n % 10) ** 2
                n //= 10
            sums += (n % 10) ** 2
            if sums == 1:
                return True
            n = sums
            # print sums
            # print setTemp
            if sums in setTemp:
                return False
            setTemp.append(sums)
  • 写回答

2条回答 默认 最新

  • CSDN专家-黄老师 2021-06-04 12:53
    关注
    def aa(n):
        """
        :type n: int
        :rtype: bool
        """
        setTemp = []
        while True:
            sums = 0
            while n // 10:
                sums += (n % 10) ** 2
                n //= 10
            sums += (n % 10) ** 2
            if sums == 1:
                return True
            n = sums
            # print sums
            # print setTemp
            if sums in setTemp:
                return False
            setTemp.append(sums)
    f = open('input.txt', 'r', encoding='utf-8')
    t = f.read()
    f.close()
    t = t.split('\n')
    rr = []
    for i in t:
        r = aa(int(i))
        rr.append([i, r])
    f1 = open('output.txt', 'w', encoding='utf-8')
    for rs in rr:
        f1.write(f'{rs[0]}:{rs[1]}')
    f1.close()

    如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢

    评论

报告相同问题?

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制