Recheriring 2022-09-18 23:35 采纳率: 50%
浏览 20
已结题

PAT 1005 继续(3n+1)猜想

自己查了好长时间没发现第四个检查点错误在哪,希望有人可以指点一下

PAT

1005 继续(3n+1)猜想

卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。

当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n=3 进行验证的时候,我们需要计算 3 5 8 4 2 1,则当我们对 n=5 8 4 2 进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重复计算,因为这 4 个数已经在验证3的时候遇到过了,我们称 5 8 4 2 是被 3“覆盖”的数。我们称一个数列中的某个数 n 为“关键数”,如果 n 不能被数列中的其他数字所覆盖。

现在给定一系列待验证的数字,我们只需要验证其中的几个关键数,就可以不必再重复验证余下的数字。你的任务就是找出这些关键数字,并按从大到小的顺序输出它们。

输入格式:
每个测试输入包含 1 个测试用例,第 1 行给出一个正整数 K (<100),第 2 行给出 K 个互不相同的待验证的正整数 n (1<n≤100)的值,数字间用空格隔开。

输出格式:
每个测试用例的输出占一行,按从大到小的顺序输出关键数字。数字间用 1 个空格隔开,但一行中最后一个数字后没有空格。

输入样例:
6
3 5 6 7 8 11
输出样例:
7 6

img

n = int(input())
num =[]
tmp = input().split(' ')


for i in range(n) :
    num.append(tmp[i])


num_1 = num[0:n]


for i in range(len(num)) :
    num[i] = int(num[i])

for i in range(len(num_1)) :
    num_1[i] = int(num_1[i])


for i in num :
    
    while i != 1 :
        
        if i % 2 == 0 :
            i = int(i / 2)
        else :
            i = int(3 * i + 1)
            
        if (i in num_1) == True:
            num_1.remove(i)
            
            
num_1.sort()
num_1.reverse()


print(' '.join(str(i) for i in num_1))
  • 写回答

2条回答 默认 最新

  • 请叫我问哥 Python领域新星创作者 2022-09-19 01:46
    关注

    题目理解有点偏差,1001里已经说了卡拉兹猜想里 (3i+1)/2 才是过程中的数,而不是 3i+1
    所以27行改成下面再试一下
    i = int((3 * i + 1)/2)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月27日
  • 已采纳回答 9月19日
  • 创建了问题 9月18日

悬赏问题

  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥15 小红薯封设备能解决的来
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答
  • ¥20 在本地部署CHATRWKV时遇到了AttributeError: 'str' object has no attribute 'requires_grad'
  • ¥15 vue+element项目中多tag时,切换Tab时iframe套第三方html页面需要实现不刷新
  • ¥50 深度强化学习解决能源调度问题
  • ¥15 一道计算机组成原理问题