第一次做算法題,真的很難!
題目要求是:輸入一系列數字(以空格分開),算出這個數字列表的最長的連續序列,這裏的連續序列的意思是:存在連續的數字(後面的數比前面的數大1),eg:輸入的數是:3520 4 3 89 56 88 3521 9 90 1 99 2 87
得到的連續序列有三個:分別是——1,2,3,4/87,88,89,90/3520,3521,但是最長的連續序列只有前兩個,長度是4!
然後題目說,需要將得到的最長連續序列得長度以及具體得組成寫到out.txt文件中!並且顯示出來,像下面這樣:
輸入:
3520 4 3 89 56 88 3521 9 90 1 99 2 87
輸出:
4
1,2,3,4
87,88,89,90
花了好久寫出了一個測試是對的代碼:
arrs = list(input('').split(' '))
x = []
for arr in arrs:
x.append(int(arr))
# 3520 4 3 89 56 88 3521 9 90 1 99 2 87
f = open('out.txt',mode="w",encoding='utf-8')
counts = []
for i in range(0,len(x)-1):
if (sorted(x)[i] == sorted(x)[i + 1] - 1):
counts.append(i)
else:
num1 = 0
for i in range(1,len(x)):
if(sorted(x)[i-1] + 1 == sorted(x)[i]):
counts.append(i)
else:
num1 = 0
counts = list(set(counts))
results = []
for i in range(len(counts)):
if (i == 0):
pass
else:
if(counts[i] - counts[i-1] != 1):
results.append(i)
# 求出最長連續序列的長度
for i in range(len(results)):
max1 = results[0]
if (len(results) == 0):
print(0)
else:
max1 = max(max1,results[i]-results[i-1])
with open('out.txt',mode="w",encoding="utf-8") as f:
f.write(str(max1))
f.write("\n")
print(max1)
f.close()
num = 0
for i in range(len(results)):
if num == 0:
end = []
for j in range(int(results[0])):
f = open('out.txt', mode="a+", encoding="utf-8")
f.write(str(sorted(x)[j]))
end.append(str(sorted(x)[j]))
f.write(" ")
f.write("\n")
num += 1
print(','.join(end))
else:
end = []
for j in range(counts[int(results[num-1])],counts[int(results[num])]-1):
f = open('out.txt', mode="a+", encoding="utf-8")
f.write(str(sorted(x)[j]))
end.append(str(sorted(x)[j]))
f.write(" ")
print(','.join(end))
f.write("\n")
num += 1
break