您的位置:首页 > 编程语言 > Python开发

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

2017-09-29 16:58 183 查看
#思路 将每个输入值的卡拉兹值 作为一个字符串,然后字符串之间进行对比,得出需要的结果
num = int(input())
input_n =(input().split()) #按空格拆分输入内容
list_n = []
n_change = []
all_nchange = []
for i in range(num):
list_n.append(int(input_n[i])) #将拆分后的字符串 转化为int类 放入该表

for i in range(num):
n_str = str(list_n[i])
n = list_n[i]
while n != 1:
if n % 2 == 0:
n =(n // 2)   #2个数相除总是浮点型,即便2个都是int类型。若想整除,则使用  //  运算符
else:
n =(3 * n + 1)//2
n_str+=str(n)    #每个值 所得到的全部卡拉兹值n 合为一个字符串
all_nchange.append(n_str)   #将每个值的字符串 放入该表

put_list = []
for i in range(num):
for x in all_nchange:
if (all_nchange[i] in x) and (not all_nchange[i] == x ):   #对比字符串(前者在后者中包含,且两者不等)
result = False
break
else:
result = True
if result == True:
put_list.append(list_n[i])  #将符合的值放入该表

put_list.sort(reverse=True)
put = ''
for j in put_list:
put +=' '+str(j)  #将上述表内容转化为字符串(每个值中间加空格)
print(put.strip()) #输出字符串(去除首位空格)
参照博主zjw_python的代码  在其基础上做了些自己容易理解的更改

博主链接http://blog.csdn.net/zjw_python/article/details/62434123
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python PAt