鱼C论坛

 找回密码
 立即注册
查看: 1410|回复: 12

[已解决]题目求助

[复制链接]
发表于 2020-9-9 10:35:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这个最后的题目怎么才能比较各个sequence的长度啊?
最佳答案
2020-9-9 17:53:25
xxlxxl 发表于 2020-9-9 17:43
用这个代码为什么输出的是18的sequence和19的sequence呢?

你不是要求最长的么?
最长为21
18,9,28,14,7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1,
19,58,29,88,44,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1,
18和19都是21位,都是最长的啊

当无数次重复这个条件是=时最后结果一定是1

当无数次重复这个条件是=时最后结果一定是1

例子1

例子1

题目

题目
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-9 10:42:19 | 显示全部楼层
没看懂题目。。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 10:52:34 | 显示全部楼层
是这样么?
a = []
start = 18
a.append(start)
while start > 1:
    start = int(start / 2) if start % 2 == 0 else  int(start * 3 + 1)
    a.append(start)
print(a)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-9 11:02:39 | 显示全部楼层

是的是的,但是有没有办法最后输出的不是列表是数字呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 11:04:04 | 显示全部楼层
xxlxxl 发表于 2020-9-9 11:02
是的是的,但是有没有办法最后输出的不是列表是数字呢

啥意思?那你循环列表内元素,逐个打印,不就完了么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-9 11:07:22 | 显示全部楼层
疾风怪盗 发表于 2020-9-9 11:04
啥意思?那你循环列表内元素,逐个打印,不就完了么

还有个问题,start不是固定的,start是argv[1]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 11:09:56 | 显示全部楼层
xxlxxl 发表于 2020-9-9 11:07
还有个问题,start不是固定的,start是argv[1]

argv[0]代表模块文件名、argv[1]代表传入的第一个命令行参数

argv = [] # real value of type <type 'list'>
详解:argv是sys模块的一个全局变量,也称sys模块的一个属性!argv本身为一个list类型的对象,该对象持有的第1个元素是命令行中传入的模块名、从第2个元素开始(含),每个元素都是在命令行中传入的参数!注意:argv持有的每个元素的类型均为str(字符串)



举个例子
python temp.py a b c d
说明:命令行运行temp.py模块,同时传入4个参数:a、b、c、d

sys.argv == ["temp.py","a","b","c","d"]  #sys.argv是持有5个元素的list对象

sys.argv[0]  == "temp.py"   #第1个元素为模块名“temp.py”

sys.argv[1] == "a"               #第2个元素为"a"

sys.argv[2] == "b"               #第3个元素为"b"

sys.argv[3] == "c"               #第4个元素为"c"

sys.argv[4] == "d"               #第5个元素为"d"

没这么用过,就看过视频里老师这么用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-9 11:10:23 | 显示全部楼层
疾风怪盗 发表于 2020-9-9 11:04
啥意思?那你循环列表内元素,逐个打印,不就完了么

就大致是你那个代码没错,但有个附加条件,比如sys,argv[1]是20,就得把从1到20的所有数字都试一遍,得出20个sequence,然后再比较这20个sequence的长度,最后打印最长的那个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 11:44:10 | 显示全部楼层
xxlxxl 发表于 2020-9-9 11:10
就大致是你那个代码没错,但有个附加条件,比如sys,argv[1]是20,就得把从1到20的所有数字都试一遍,得出 ...
import sys

a = []
start = sys.argv[1]
#start = 20
for i in range(1, int(start) + 1):
    temp = {'num': i, 'result': [i]}
    while i > 1:
        i = int(i / 2) if i % 2 == 0 else int(i * 3 + 1)
        temp['result'].append(i)
    temp['len'] = len(temp['result'])
    a.append(temp)

max_len = max([i['len'] for i in a])
print(f'最长为{max_len}')

for j in a:
    if j['len'] == max_len:
        max_sequence = j['result']
        for k in max_sequence:
            print(k, end=',')
        print()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 11:55:56 | 显示全部楼层
import argparse
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-9 17:43:35 | 显示全部楼层

用这个代码为什么输出的是18的sequence和19的sequence呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 17:53:25 | 显示全部楼层    本楼为最佳答案   
xxlxxl 发表于 2020-9-9 17:43
用这个代码为什么输出的是18的sequence和19的sequence呢?

你不是要求最长的么?
最长为21
18,9,28,14,7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1,
19,58,29,88,44,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1,
18和19都是21位,都是最长的啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-9 18:58:35 | 显示全部楼层
疾风怪盗 发表于 2020-9-9 17:53
你不是要求最长的么?
最长为21
18,9,28,14,7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1,

嗷对了对了,感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 18:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表