一、給定任意一個正整數,求比這個數大且最小的「不重複數」,「不重複數」的含義是相鄰兩位不相同,例如1101是重複數,而1201是不重複數。(15分)python
二、長度爲N(N很大)的字符串,求這個字符串裏的最長迴文子串。(15分)算法
三、數軸上從左到右有n各點a[0], a[1], ……,a[n -1],給定一根長度爲L的繩子,求繩子最多能覆蓋其中的幾個點。(15分)ide
流程都是A介紹思路,B貼出代碼,代碼寫的也不是很漂亮,湊湊活活貼下ui
一:spa
A.獲取輸入base的位數,而後分爲兩種狀況,狀況1是在該位數下尋找所須要的最小不重複數,狀況2是在比該位數+1的位數下找最小不重複數3d
狀況2比較簡單,就是1010...的羅列,一直到知足位數要求,狀況1也就是從base+1開始挨個判斷。。。感受就這麼簡單,沒有想什麼高深的算法,code
若是理解錯了同志們輕拍。。blog
B.代碼ip
1 #!/bin/env/python 2 # -*- encoding:utf-8 -*- 3 #Filename: 1.py 4 5 import sys 6 7 def Get_base_out(num, length): 8 '''Get_base_out method''' 9 for i in range(int(num)+1, 10**length): 10 result = Judge(i, length) 11 if result == True: 12 return i 13 return -1 14 15 16 def Get_base1_out(num, length): 17 '''Get_base1_out method''' 18 no_repeated_num = str(1) 19 for i in range(0,length): 20 if i % 2 == 0: 21 no_repeated_num += '0' 22 else: 23 no_repeated_num += '1' 24 return no_repeated_num 25 26 27 def Judge(suspect, length): 28 ''' Judge method''' 29 temp = str(suspect) 30 for i in range(0,length-1): 31 if temp[i] == temp[i+1]: 32 return False 33 return True 34 35 36 if __name__ == "__main__": 37 for line in sys.stdin: 38 base = line.strip() 39 length = len(base) 40 court = Get_base_out(base, length) 41 if court == -1: 42 court = Get_base1_out(base, length) 43 print court
二:字符串
A.既然找東西,確定都遍歷一遍嘍,那只有想辦法在一遍遍歷中就完成任務,計劃用兩個變量分別存儲迴文自串的位置和迴文字串的長度。從頭至尾遍歷
判斷下就完事。
B.代碼:
注:沒寫123321這種類型的迴文自串,方法同樣就得再敲點代碼
python有個好處,就是列表負向不會越界,HoHo~
1 #!/bin/env/python 2 # -*- encoding:utf-8 -*- 3 #Filename: 2.py 4 5 import sys 6 7 def Find_point(base, index): 8 '''Find point method''' 9 rt_point = -1 10 if base[index-1] == base[index+1]: 11 rt_point = index 12 return rt_point 13 14 def Get_length(base, point, length): 15 '''Get huiwen length''' 16 rt_len = -1 17 for i in range(1, (length+1)/2): 18 if point - i >= 0 and point + i < length: 19 if base[point-i] == base[point+i]: 20 rt_len = i 21 else: 22 break 23 else: 24 break 25 return rt_len 26 27 28 def Get_huiwen(init_in): 29 '''Get huiwen''' 30 base = str(init_in) 31 length = len(base) 32 huiwen_point = -1 33 huiwen_len = -1 34 for i in range(0, length - 1): 35 tmp_point = -1 36 tmp_len = -1 37 tmp_point = Find_point(base, i) 38 if tmp_point != -1: 39 tmp_len = Get_length(base, tmp_point, length) 40 if tmp_len > huiwen_len: 41 huiwen_point = tmp_point 42 huiwen_len = tmp_len 43 if huiwen_point == -1 and huiwen_len == -1: 44 return "None" 45 start = huiwen_point - huiwen_len 46 end = huiwen_point + huiwen_len + 1 47 return base[start:end] 48 49 if __name__ == "__main__": 50 for line in sys.stdin: 51 arg = line.strip() 52 rt_value = Get_huiwen(arg) 53 print "base:\n%s\nhuiwen:\n%s" % (arg, rt_value)
肚子咕咕叫了,下次補第三題。。。